SQL 插入语句
一、插入单条记录
·指定所有字段:
结果: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 |