試圖用一個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