我有一个公用表,该表被数据库中的其他两个表引用。另外两个表的主键也是外键,指向公用表主键的值。
我想知道有没有办法,MySQL 可以防止两个表具有相同的值作为引用? 我的想法是这样的:
登录行应在两个表(学生或教授)之一中引用,但不能同时在两个表中引用。
最佳答案
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/