解决sqlite删除某条记录后主键id不连续

解决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

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值