2012-01-04 105 views
2

這是2臺ON DELETE CASCADE不工作

CREATE TABLE Customer(
    c_id  INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    f_name  VARCHAR(50) NOT NULL, 
    l_name  VARCHAR(50) NOT NULL, 
    email  VARCHAR(100) NOT NULL, 
    number  INTEGER, 
    date_joined DATE NOT NULL CHECK (date_added <= now()) 
); 

CREATE TABLE Address(
    a_id  INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    c_id  INTEGER NOT NULL REFERENCES Customer(c_id) ON DELETE CASCADE, 
    billing  BOOLEAN, 
    f_line  VARCHAR(50) NOT NULL, 
    s_line  VARCHAR(100), 
    county  VARCHAR(20) NOT NULL, 
    p_code  VARCHAR(7) NOT NULL, 
    number  INTEGER(11) 
); 

然而,當我刪除一個客戶,他們的地址沒有被刪除的sql,任何想法,爲什麼?

+5

所以會發生什麼?它失敗?它留下了一個孤兒記錄?什麼RDBMS? – 2012-01-04 17:51:01

+2

我猜你使用的是mysql,默認引擎是MyISAM,它不支持外鍵 – a1ex07 2012-01-04 17:52:35

+2

另外,再次將表編寫回來檢查外鍵約束是否存在並且具有級聯刪除。 – MatBailie 2012-01-04 17:53:02

回答

6

真的不能告訴肯定不知道哪個DB你使用,但我認爲你可能需要聲明FK作爲這樣的約束:

CREATE TABLE Address(
    a_id  INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    c_id  INTEGER NOT NULL, 
    billing  BOOLEAN, 
    f_line  VARCHAR(50) NOT NULL, 
    s_line  VARCHAR(100), 
    county  VARCHAR(20) NOT NULL, 
    p_code  VARCHAR(7) NOT NULL, 
    number  INTEGER(11), 
    FOREIGN KEY (c_id) REFERENCES Customer(c_id) ON DELETE CASCADE 
); 
+1

好的。 MySQL會忽略(沒有錯誤或警告)問題中顯示的「內聯」外鍵定義(即使對於InnoDB也是如此)。 – 2012-01-04 18:08:15