试图用一个 MySQL 示例向其他人解释 REFERENCES CONSTRAINT,但我无法使这个讨厌的示例起作用!如果我将它定义为 FOREIGN KEY 似乎可行,但我有教科书说我不必这样做(使其成为列级引用约束而不是表级约束)。
问题来了,为什么UPDATE了dept表的dname之后,emp表的dname没有变化?
-- SQL CODE BEGINS
DROP TABLE IF EXISTS dept;
DROP TABLE IF EXISTS emp;
CREATE TABLE dept (
dname CHAR(10),
dnum numeric(3,0)
) ENGINE=InnoDB;
CREATE TABLE emp (
dname CHAR(10) REFERENCES dept(dname) ON UPDATE CASCADE,
ename CHAR(10)
) ENGINE=InnoDB;
INSERT INTO dept VALUES ("AAA", 111);
INSERT INTO dept VALUES ("BBB", 222);
INSERT INTO emp VALUES ("CCC", "Carol");
INSERT INTO emp VALUES ("AAA", "Alice");
SELECT * from dept;
SELECT * from emp;
UPDATE dept SET dname="XYZ" WHERE dnum=111;
SELECT * from dept;
SELECT * from emp;
-- SQL CODE ENDS
啊!
最佳答案
- 声明
dept.dname
为PRIMARY KEY
- 在
emp.dname
上创建 FOREIGN KEY 约束
完整的 DDL:
CREATE TABLE dept
(
dname CHAR(10) PRIMARY KEY,
dnum numeric(3,0)
) ENGINE=InnoDB;
CREATE TABLE emp
(
dname CHAR(10) ,
ename CHAR(10),
CONSTRAINT em_FR FOREIGN KEY (dname)
REFERENCES dept(dname) ON UPDATE CASCADE
) ENGINE=InnoDB;
关于mysql - 为什么引用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415471/