试图用一个MySQL例子来解释参考约束给其他人,而且我不能让这个讨厌的例子工作!它似乎工作,如果我把它定义为一个外键,但我有教科书说,我不必这样做(使其成为一个列级别的参考约束,而不是表级别)。为什么没有引用起作用
问题是,在更新到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
ARGH!
谢谢!是的,这确实有效。但是,我有两本教科书说我可以只使用“REFERENCES”而不使用FOREIGN KEY,从而使其成为“列级约束”而不是“表级约束”。当然,这些差异也会让我感到不安。 – crawdady
这些教科书似乎在讨论学术理论,而不是实际的实践。 **“理论上,理论和实践没有区别,实际上存在。”** – spencer7593