我有一个公用表,它被数据库中的另外两个表引用。另外两个表的主键也是指向公用表主键值的外键。
我想知道有没有办法,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
任何存储引擎中的约束。