SQL插入新条目条件处理:sqlite “insert or replace” 和 “insert or ignore”
先说说两个的区别:
"insert or ignore":如果表中不存在就插入,存在则忽略当前新数据;
“insert or replace”:如果表中不存在就插入,存在则更新当前最新数据;
接下来举例说明
1、首先建表,说明键值或者判断唯一性条件;
"create table SourceLogDat (事件名称 TEXT ,时间 TEXT ,实际值 TEXT, 设定值 TEXT,UNIQUE(事件名称, 时间))"
或者
"create table SourceLogDat (事件名称 TEXT ,时间 TEXT ,实际值 TEXT, 设定值 TEXT,PRIMARY KEY(事件名称, 时间))"
经过以上建表后,事件名称
和时间
就是主键值唯一性标识,即"PRIMARY KEY
“或者”UNIQUE
"中内容。
假如数据表已有以下数据
事件名称 时间 实际值 设定值
---------------------------------------
模块启动 2021/11/12 14:25:02 12.2 15.0
单模块故障 2021/10/12 08:25:42 12.1 15.0
负载低压 2021/11/05 11:25:12 11.2 15.0
2、通过"insert or ignore"插入新条目;
(1)、插入不重复条目
insert or ignore into SourceLogDat values ('日志清除','2021/11/12 14:25:02','12.5','25.8');
判断事件名称和时间,发现表格条目不存在,可插入,更新后表格变为:
事件名称 时间 实际值 设定值
---------------------------------------
模块启动 2021/11/12 14:25:02 12.2 15.0
单模块故障 2021/10/12 08:25:42 12.1 15.0
负载低压 2021/11/05 11:25:12 11.2 15.0
日志清除 2021/11/12 14:25:02 12.5 25.8
(2)、插入已重复条目
insert or ignore into SourceLogDat values ('模块启动','2021/11/12 14:25:02','12.5','25.8');
判断事件名称和时间,发现表格条目存在,忽略,表格未更新;
2、通过"insert or replace"插入新条目;
insert or replace into SourceLogDat values ('交流欠压','2021/11/05 05:25:12','12.5','15.0');
判断事件名称和时间,发现表格条目不存在,可插入,更新后表格变为:
事件名称 时间 实际值 设定值
---------------------------------------
模块启动 2021/11/12 14:25:02 12.2 15.0
单模块故障 2021/10/12 08:25:42 12.1 15.0
负载低压 2021/11/05 11:25:12 11.2 15.0
日志清除 2021/11/12 14:25:02 12.5 25.8
交流欠压 2021/11/05 05:25:12 12.5 15.0
(2)、插入已重复条目
insert or replace into SourceLogDat values ('交流欠压','2021/11/05 05:25:12','12.5','25.8');
判断事件名称和时间,发现表格条目存在,更新为最新值,表格更新:
事件名称 时间 实际值 设定值
---------------------------------------
模块启动 2021/11/12 14:25:02 12.2 15.0
单模块故障 2021/10/12 08:25:42 12.1 15.0
负载低压 2021/11/05 11:25:12 11.2 15.0
日志清除 2021/11/12 14:25:02 12.5 25.8
交流欠压 2021/11/05 05:25:12 12.5 25.8
表格中设定值发生改变,值由15.0
更新为25.8
。