sqlite 自增比较奇葩,自增字段必须建在主键上,但主键很重要。不是每种情况都是给自增去做。比如要实现replace into 时, 要主键作为更新标识。用自增很难实现。
开工:
1、建立一个主表,主表的ID是自增ID,但不是主键。而billno 是主键
CREATE TABLE base_user (
id INTEGER UNIQUE ON CONFLICT ROLLBACK,
billno TEXT (20) NOT NULL
DEFAULT ('')
PRIMARY KEY ON CONFLICT ROLLBACK,
userno TEXT (20) DEFAULT (''),
password TEXT (20) DEFAULT (''),
username TEXT (50) DEFAULT (''),
lastdate DATETIME,
admin TEXT (20) DEFAULT (''),
linecode TEXT (10) DEFAULT (''),
linename TEXT (30) DEFAULT ('')
);
2、选创建一个用于记录自动ID的辅助表。
CREATE TABLE tmp_newid (
id INTEGER,
billno TEXT (20) PRIMARY KEY
DEFAULT ('')
);
3、在base_user 表上创建触发器,从而实现ID的自增
CREATE TRIGGER autoincrement_user_id
AFTER INSERT
ON base_user
FOR EACH ROW
BEGIN
INSERT INTO tmp_newid (
id,
billno
)
SELECT (IFNULL(MAX(id), 0) + 1),
NEW.billno
FROM base_user;
UPDATE base_user
SET id = max(tmp_newid.id)
FROM tmp_newid
WHERE tmp_newid.billno = new.billno;
END;
3、向用户表添加数据试试
到此大功告成。
本文介绍了如何在SQLite中使用自增字段,强调了主键的重要性,并通过创建辅助表和触发器实现ID的自动增长,同时讨论了在replaceinto操作中的应用挑战。
6453

被折叠的 条评论
为什么被折叠?



