根据SQLite docs ,获得自动增量列的唯一方法是在主键上。
我需要一个复合主键,但我也需要自动递增。有没有办法在 SQLite 中实现这两个目标?
我在 PostgreSQL 中编写的表的相关部分:
CREATE TABLE tstage (
id SERIAL NOT NULL,
node INT REFERENCES nodes(id) NOT NULL,
PRIMARY KEY (id,node),
-- ... other columns
);
提出此要求的原因是所有节点最终都会将其数据转储到单个集中节点,在该节点中,如果使用单列 PK,则会发生冲突。
最佳答案
文档是正确的。 但是,可以在触发器中重新实现自动增量逻辑:
CREATE TABLE tstage (
id INT, -- allow NULL to be handled by the trigger
node INT REFERENCES nodes(id) NOT NULL,
PRIMARY KEY (id, node)
);
CREATE TABLE tstage_sequence (
seq INTEGER NOT NULL
);
INSERT INTO tstage_sequence VALUES(0);
CREATE TRIGGER tstage_id_autoinc
AFTER INSERT ON tstage
FOR EACH ROW
WHEN NEW.id IS NULL
BEGIN
UPDATE tstage_sequence
SET seq = seq + 1;
UPDATE tstage
SET id = (SELECT seq
FROM tstage_sequence)
WHERE rowid = NEW.rowid;
END;
(如果有多个表,则使用通用的 my_sequence
表和表名称。)
关于sqlite - 是否可以在 Sqlite 中的复合 PK 上(模拟?)自动增量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10641004/