MySQLの例を使用して、REFERENCES CONSTRAINTを他の人に説明しようとしていますが、厄介な例を機能させることはできません。それを外部キーとして定義すれば機能するように見えますが、それを行う必要はないと言っている教科書があります(テーブルレベルではなく列レベルの参照制約にします)。
問題は、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!