SQLite可以替换多行并忽略失败的行

时间:2017-09-16 07:52:04

标签: sql sqlite

有一个用户表:

testing atan2() with 1000000000 test vectors
max rel err =  3.53486939e-005

atan2(1,0)  =  1.57079637e+000
atan2(-1,0) = -1.57079637e+000
atan2(0,1)  =  0.00000000e+000
atan2(0,-1) =  3.14159274e+000

我按如下方式执行sql:

1,因CREATE TABLE IF NOT EXISTS "users" ( "id" bigint PRIMARY KEY NOT NULL, "name" text NOT NULL, "gender" integer NOT NULL );

而失败
NOT NULL constraint failed: users.name

2,成功插入第1项和第3项

insert into users(id, name, gender) values (1, 'Jack', 1), (2, Null, 1), (3, 'Mary', 0);

3,insert or ignore into users(id, name, gender) values (1, 'Jack', 1), (2, Null, 1), (3, 'Mary', 0);

也失败了
NOT NULL constraint failed: users.name

如果我的表中有重复的行,我想要执行替换,如果一个项目无法满足约束,则可以成功插入或替换其他项目。但是不支持replace into users(id, name, gender) values (1, 'Jack', 1), (2, Null, 1), (3, 'Mary', 0); 。还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

REPLACE是INSERT OR REPLACE的别名,您只能指定一个conflict resolution algorithm

单一陈述无法做到这一点。 您必须逐个插入行,并手动检查大多数可能的约束违规。