gpt4 book ai didi

mysql - 如何防止两个引用共享同一个主键

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:52 27 4
gpt4 key购买 nike

我有一个公用表,该表被数据库中的其他两个表引用。另外两个表的主键也是外键,指向公用表主键的值。

我想知道有没有办法,MySQL 可以防止两个表具有相同的值作为引用?我的想法是这样的:

logins instance should be only in one table (students or professors)

登录行应在两个表(学生或教授)之一中引用,但不能同时在两个表中引用。

最佳答案

CREATE TABLE common (
id INT PRIMARY KEY,
type CHAR(1) NOT NULL,
UNIQUE KEY (id, type)
);

INSERT INTO common (id, type) VALUES (1, 'A'), (2, 'B');

CREATE TABLE typeA (
id INT PRIMARY KEY,
type CHAR(1) NOT NULL DEFAULT 'A',
FOREIGN KEY (id, type) REFERENCES common(id, type)
);

INSERT INTO typeB (id, type) VALUES (1, 'A'); -- OK
INSERT INTO typeB (id, type) VALUES (2, 'A'); -- FAIL

CREATE TABLE typeB (
id INT PRIMARY KEY,
type CHAR(1) NOT NULL DEFAULT 'B',
FOREIGN KEY (id, type) REFERENCES common(id, type)
);

INSERT INTO typeB (id, type) VALUES (1, 'B'); -- FAIL
INSERT INTO typeB (id, type) VALUES (2, 'B'); -- OK

您需要一些方法来强制 type 为每个子表中的正确值。例如触发器或查找表的另一个外键。 MySQL 不支持任何存储引擎中的CHECK 约束。

关于mysql - 如何防止两个引用共享同一个主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18137215/

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