SQL 插入语句
插入单条记录
指定所有字段:
postgres=# insert into tbase(id, nickname) values(1, 'hello TBase');
结果:
INSERT 0 1
指定某些字段,未指定字段将使用默认值:
postgres=# insert into tbase(nickname) values('TBase 好');
结果:
INSERT 0 1
不指定字段,则默认所有字段与建表时一致:
postgres=# insert into tbase values(nextval('t_id_seq'::regclass), 'TBase 好');
结果:
INSERT 0 1
字段顺序可以任意排列:
postgres=# insert into tbase(nickname, id) values('TBase swap', 5);
结果:
INSERT 0 1
使用
default
关键字,即值为建表时指定的默认值方式:postgres=# insert into tbase(id, nickname) values(default, 'TBase default');
结果:
INSERT 0 1
插入记录后的数据:
postgres=# select * from tbase;
id | nickname |
1 | hello TBase |
2 | TBase 好 |
5 | TBase swap |
3 | TBase 好 |
4 | TBase default |
插入多数记录
插入多条记录:
postgres=# insert into tbase(id, nickname) values(1, 'hello TBase'), (2, 'TBase 好');
结果:
INSERT 0 2
插入后查询结果:
postgres=# select * from tbase;
id | nickname |
1 | hello TBase |
2 | TBase 好 |
使用子查询插入数据
使用子查询插入数据:
postgres=# insert into tbase(id, nickname) values(1, (select relname from pg_class limit 1));
结果:
INSERT 0 1
插入后查询结果:
postgres=# select * from tbase;
id | nickname |
1 | pg_statistic |
从另外一个表取数据进行批量插入
从另一个表批量插入数据:
postgres=# insert into tbase(nickname) select relname from pg_class limit 3;
结果:
INSERT 0 3
插入后查询结果:
postgres=# select * from tbase;
id | nickname |
5 | pg_type |
6 | pg_toast_2619 |
4 | pg_statistic |
大批量的生成数据
使用
generate_series
函数大批量生成数据:postgres=# insert into tbase select t, md5(random()::text) from generate_series(1,10000) as t;
结果:
INSERT 0 10000
插入后计数:
postgres=# select count(1) from tbase;
count |
10000 |
返回插入数据,轻松获取插入记录的 serial 值
插入记录并返回所有字段:
postgres=# insert into tbase(nickname) values('TBase 好') returning *;
id | nickname |
7 | TBase 好 |
指定返回字段:
postgres=# insert into tbase(nickname) values('hello TBase') returning id;
id |
8 |
insert..update 更新
使用
ON CONFLICT
子句进行更新:postgres=# insert into t values(1,'pgxz') ON CONFLICT (id) DO UPDATE SET nc = 'tbase';
结果:
INSERT 0 1
更新后查询结果:
postgres=# select * from t;
id | nc |
1 | tbase |
insert all
使用
insert all
语句:postgres=# create table t5(f1 int, f2 int);postgres=# create table t6(f1 int, f2 int);postgres=# insert all into t5 values(1, 1) into t6 values(1, 1) select 1 as f1, 1 as f2;
结果:
INSERT 0 2
查询 t5 表:
postgres=# select * from t5;
f1 | f2 |
1 | 1 |
查询 t6 表:
postgres=# select * from t6;
f1 | f2 |
1 | 1 |