gpt4 book ai didi

sqlite - 是否可以(模拟?)在 Sqlite 中的复合 PK 上进行 AUTOINCREMENT?

转载 作者:行者123 更新时间:2023-12-03 17:45:11 25 4
gpt4 key购买 nike

根据 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 上进行 AUTOINCREMENT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10641004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com