插入/删除 行
INSERT 插入
-
全字段
INSERT INTO public.table_name VALUES ('11', 'cn', '0');INSERT INTO public.table_name VALUES ('11', 'cn', DEFAULT); -
部分字段
INSERT INTO public.table_name (column1, column2) VALUES ('11', 'cn'); -
部分字段 + 批量
INSERT INTO public.table_name (column1, column2) VALUES ('11', 'cn'), ('21', 'non_cn'); -
部分字段 + 批量 + 可能冲突插入处理
INSERT INTO public.table_name (column1, column2) VALUES ('11', 'cn'), ('21', 'non_cn') ON CONFLICT (column1) DO UPDATE SET column2 = EXCLUDED.column2;ON CONFLICT- 若已经存在一行数据的column1值,就是想要插入的值,则发生冲突,一般无法插入
- 如果不想做任何更新,则后面接
DO NOTHING - 如果想更新已有的,则后面接
DO UPDATE SET 其他列 = 新的值
EXCLUDED- 代指
新插入的冲突数据构造出来的伪表,用来引用做更新
- 代指
DELETE 删除
-
单表内删除
DELETE FROM public.table_name WHERE column1 = 待查值;- 一定要带上
WHERE,否则很危险(会把整个表数据都删了) - 执行成功后,默认会返回删除的数量
- 可以最后加上
RETURNING *,返回删除的所有行的详细信息
- 可以最后加上
- 一定要带上
-
借用其他表删除(
USING)DELETE FROM films USING producers WHERE producer_id = producers.id AND producers.name = 'foo';- 从producers中取出name为foo的所有id,删除films中对应id的行
- 也可用子查询来实现
DELETE FROM films WHERE producer_id IN (SELECT id FROM producers WHERE name = 'foo');