解决sqlite删除某条记录后主键id不连续
建表例子
例如建一张log_tab表,设置ID为主键
CREATE TABLE IF NOT EXISTS log_tab (ID INTEGER PRIMARY KEY,LOG VARCHAR(255));
插入5条数据
INSERT INTO log_tab(LOG) VALUES ("loginfo1");
INSERT INTO log_tab(LOG) VALUES ("loginfo2");
INSERT INTO log_tab(LOG) VALUES ("loginfo3");
INSERT INTO log_tab(LOG) VALUES ("loginfo4");
INSERT INTO log_tab(LOG) VALUES ("loginfo5");
此时使用查询语句会得到ID为1-5的连续记录
SELECT * FROM log_tab;
执行以下删除语句
DELETE FROM log_tab WHERE 'ID'=3;
此时删除了id为3的记录,再执行上面的查询语句,你会发现ID排列为1245,由于目前我电脑上没工具,所以暂时没法截图实例
解决方式
例如刚刚删的是ID=3的记录,我们执行以下语句
UPDATE log_tab SET 'ID'=(ID-1) WHERE ID>3;
如果不想每次执行完删除语句后都执行这句,那么可以将这个操作添加到触发器中。
添加方式
CREATE TRIGGER trigger_log_tab AFTER DELETE ON log_tab
BEGIN
UPDATE log_tab SET 'ID'=(ID-1) WHERE ID>old.ID;
END
trigger_log_tab 为触发器名字,DELETE 为操作触发方式,log_tab表名,old.ID表示的是你执行删除操作那张表的id