2012-01-16 48 views
5

我不能ON DELETE SET DEFAULT建立外鍵,但如果我使用ON DELETE CASCADE那麼所有在這裏工作是我的SQL無法創建外鍵用ON DELETE SET DEFAULT

CREATE TABLE person( 
    customer_id INT AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(100) UNIQUE 
); 


CREATE TABLE habits( 
    customer_id INT AUTO_INCREMENT PRIMARY KEY, 
    habit VARCHAR(100) UNIQUE 
); 

INSERT INTO `test`.`habits` (`customer_id`, `habit`) VALUES (NULL, 'smoking'), (NULL, 'drinking'); 
INSERT INTO `test`.`person` (`customer_id`, `name`) VALUES (NULL, 'John'), (NULL, 'Steve'); 

CREATE TABLE foreigner( 
    customer_id INT AUTO_INCREMENT PRIMARY KEY, 
    customer VARCHAR(100) DEFAULT 'John', 
    habbit VARCHAR(100) DEFAULT 'smoking', 
    FOREIGN KEY (customer) REFERENCES person(name) ON DELETE SET DEFAULT ON UPDATE CASCADE, 
    FOREIGN KEY (habbit) REFERENCES habits(habit) ON DELETE SET DEFAULT ON UPDATE CASCADE  
); 

很奇怪,它的作品,如果我使用ON DELETE CASCADE ....任何想法?

+0

因此,您不想從5個(或任何其他數量的)行從'foreigner'表中刪除(由於級聯效應),您最終需要5個(幾乎)相同的行與'(customer,habbit )=('約翰,'吸菸')'。你爲什麼要這樣? –

+0

我無法拒絕提及3個無用的'customer_id'列。 –

+0

與這些值的表只是一個例子 - 實際上我有更大的表,值和行,甚至可能是有用的:) – fjckls

回答

3

MySQL Reference Manual ...

SET DEFAULT:這個動作被分析器的認可,但是InnoDB的拒絕表含有ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句 定義。

您可以嘗試SET NULL,但我不確定是否會導致您其他問題,而不是。

+1

謝謝我試過ON DELETE SET NULL,它的工作。我想必須堅持下去......如果InnoDB不支持ON DELETE SET DEFAULT,那麼哪個引擎會使用外鍵與ON UPDATE CASCADE一起支持它? – fjckls