Sqlite 防止插入重复数据

在SQLITE中,可以用以下方法防止插入重复数据,
1.设置表的联合主键
2.在INSERT语句中添加OR IGNORE,即可(重复数据会跳过,且不影响后续数据插入)
示例如下:
insert OR IGNORE into PDA_Test (DeviceID,MethodName) values(‘1112′,’测试原有’);

sqlite避免重复插入数据。

SQLite 数据库常用约束如下:

NOT NULL – 非空
UNIQUE – 唯一
PRIMARY KEY – 主键
FOREIGN KEY – 外键
CHECK – 条件检查
DEFAULT – 默认

用insert语句插入数据,为避免重复插入又不打断数据处理。

首先要避免重复插入,就必须在插入时引发冲突。在表中设置了id字段,该字段为UNIQUE属性,当插入的id已存在时引发冲突。

引发冲突后insert会做一些处理,处理方式由OR字句定义。包含如下:

ROLLBACK当发生约束冲突,立即ROLLBACK,即结束当前事务处理,命令中止并返回SQLITE_CONSTRAINT代码。若当前无活动事务(除了每一条命令创建的默认事务以外),则该算法与ABORT相同。
ABORT当发生约束冲突,命令收回已经引起的改变并中止返回SQLITE_CONSTRAINT。但由于不执行ROLLBACK,所以前面的命令产生的改变将予以保留。缺省采用这一行为。
FAIL当发生约束冲突,命令中止返回SQLITE_CONSTRAINT。但遇到冲突之前的所有改变将被保留。例如,若一条UPDATE语句在100行遇到冲突100th,前99行的改变将被保留,而对100行或以后的改变将不会发生。
IGNORE当发生约束冲突,发生冲突的行将不会被插入或改变。但命令将照常执行。在冲突行之前或之后的行将被正常的插入和改变,且不返回错误信息。
REPLACE当发生UNIQUE约束冲突,先存在的,导致冲突的行在更改或插入发生冲突的行之前被删除。这样,更改和插入总是被执行。命令照常执行且不返回错误信息。当发生NOT NULL约束冲突,导致冲突的NULL值会被字段缺省值取代。若字段无缺省值,执行ABORT算法

原文:https://blog.csdn.net/wlphlj/article/details/11978105

其他参考:

SQLite中防止重复插入数据方法

点赞