创建测试数据表
create table student (
id int constraint idx_id primary key,
name varchar(20) constraint cst_name not null
);
插入数据
insert into student values(1,'lens');
1. 根据字段,当id冲突时更新name值
insert into student values(1,'y5935') ON CONFLICT(id) do update set name=EXCLUDED.name ;
2.根据where条件选择性更新,由于id没有大于5的数据,故不更新。
(可以直接指定约束名,不需要字段,在实际中最好使用字段名)
insert into student values(2,'Y') ON CONFLICT ON CONSTRAINT idx_id do update set name=EXCLUDED.name where student.id>5 ;
3.只插入满足条件的数据行 ,冲突不做任何更新。
insert into student values(2,'Lens5935'),(3,'YYY') ON CONFLICT(id) do nothing ;
Insert用法区别:
1.insert into select
insert into Table1(field1,field2,...) select value1,value2,.....from Table2 [条件语句]
或者
insert into Table1 slelect * from Table2 [条件语句]
将Table2部分字段中的数据复制到Table1,首先字段的数量要一致,value的值可以是常量,但必须对应着字段接收;
将Table2全部字段数据复制到Table1,字段数量要一致;
示例:
insert into stu(id,name)
select id,name from student
或者
insert into stu
select id,name from student
2.select insert into
select value1,value2 into Table1 from Table2 [条件语句];
要求Table1不存在,在插入时会自动创建表Table1,并将Table2中指定指定数据复制同步到Table1中;
示例:
select id,name into stu2 from student