如何防止这两个引用共享相同的主键

时间:2013-08-08 22:25:05

标签: mysql sql

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

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

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

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

1 个答案:

答案 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约束。