gpt4 book ai didi

sql - 确保另一个表中存在的两列的组合

转载 作者:行者123 更新时间:2023-12-04 01:08:58 25 4
gpt4 key购买 nike

如何确保另一个表中存在的两列的组合?

CREATE TABLE a (
aid INTEGER PRIMARY KEY
);

CREATE TABLE b (
aid INTEGER REFERENCES a(aid),
bid INTEGER,
PRIMARY KEY (aid, bid)
);

CREATE TABLE c (
aid INTEGER REFERENCES a(aid),
cid INTEGER,
PRIMARY KEY (aid, cid)
);

-- combination of (aid, bid) must come from b
-- combination of (aid, cid) must come from c
CREATE TABLE d (
aid INTEGER REFERENCES a(aid),
bid INTEGER REFERENCES b(bid),
cid INTEGER REFERENCES c(bid),
PRIMARY KEY (aid, bid)
);

INSERT INTO a values(1);
INSERT INTO a values(2);
INSERT INTO b values(1, 1);
INSERT INTO b values(2, 2);
INSERT INTO c values(1, 1);
INSERT INTO c values(2, 2);
INSERT INTO d values(1, 2, 2);

显然上面的“CREATE TABLE d”编码没能保证

  • (aid, bid) 的组合必须来自 b
  • (aid, cid) 的组合必须来自 c

谢谢。

最佳答案

除了 Sticky bit 和 Vladimir Baranov 关于使用 FOREIGN KEY 和 REFERENCES 的回答,对于 sqlite3 用户:

"Foreign key constraints are disabled by default (for backwards compatibility), so must be enabled separately for each database connection."这意味着,用户必须先打开一个数据库,然后运行命令“PRAGMA foreign_keys = ON;”。

如果“您使用的 SQLite 版本不支持外键(因为它早于 3.6.19 或因为它是使用定义的 SQLITE_OMIT_FOREIGN_KEY 或 SQLITE_OMIT_TRIGGER 编译的)”,则编译指示将不起作用。

关于sql - 确保另一个表中存在的两列的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65430318/

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