我有一个公共表,由数据库中的另外两个表引用。另外两个表的主键也是一个外键,指向公用表的主键值。
我想知道有没有办法,MySQL可以防止两个表都有一个与引用相同的值? 我的想法是这样的:
登录行应该在两个表(学生或教授)之一中引用,但不能同时引用。
答案 0 :(得分:3)
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
约束。