2013-05-17 38 views
2

我試圖在MySQL中創建以下表格。第一招:錯誤1215:使用ON刪除時無法添加外鍵約束SET NULL

CREATE TABLE IF NOT EXISTS address(
    address_id INT NOT NULL AUTO_INCREMENT, 
    address_region VARCHAR(10) NOT NULL, 
    address_country VARCHAR(20) NOT NULL, 
    address_city VARCHAR(30) NOT NULL, 
    PRIMARY KEY(address_id))ENGINE = InnoDB; 

我創造了它成功的,但是當我嘗試創建另一個表如下

CREATE TABLE IF NOT EXISTS spot(
    spot_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    spot_address INT(11) NOT NULL, 
    spot_name VARCHAR(50) NOT NULL, 
    spot_desc VARCHAR(500) DEFAULT ' ', 
    spot_speadd VARCHAR(100) NOT NULL, 
    spot_viewtime INT DEFAULT 0, 
    FOREIGN KEY(spot_address) 
    REFERENCES address(address_id) 
    ON DELETE SET NULL 
    ON UPDATE SET NULL); 

我得到一個錯誤:

ERROR 1215 (HY000): Cannot add foreign key constraint

這是爲什麼創建表陳述失敗?

+0

我認爲你是正確的,它的工作原理! – ssj

+0

要得到一個詳細的錯誤:運行'SHOW ENGINE INNODB STATUS'並查看「最新的外鍵錯誤」部分 –

回答

4

你必須在spot表上spot_addressNOT NULL約束,然後嘗試將其設置爲NULL在父表address刪除或更新。

0

你可以試試這個:

CREATE TABLE IF NOT EXISTS address 
(
address_id INT NOT NULL AUTO_INCREMENT, 
address_region VARCHAR(10) NOT NULL, 
address_country VARCHAR(20) NOT NULL, 
address_city VARCHAR(30) NOT NULL, 
PRIMARY KEY(address_id) 
)ENGINE = INNODB; 




CREATE TABLE IF NOT EXISTS `spot` 
(
    `spot_id` INT(11) NOT NULL AUTO_INCREMENT, 
    `spot_address` INT(11) NOT NULL, 
    `spot_name` VARCHAR(50) NOT NULL, 
    `spot_desc` VARCHAR(500) DEFAULT ' ', 
    `spot_speadd` VARCHAR(100) NOT NULL, 
    `spot_viewtime` INT(11) DEFAULT '0', 
    PRIMARY KEY (`spot_id`), 
    KEY `spot_address` (`spot_address`), 
    CONSTRAINT `spot_ibfk_1` FOREIGN KEY (`spot_address`) REFERENCES `address` (`address_id`) 
) ENGINE=INNODB DEFAULT CHARSET=utf8 
+1

您能否向我們解釋您的答案?爲我讀也會很有意思。謝謝。 –

+0

從http://dev.mysql.com/doc/refman/5.1/en/create-table.html {INDEX | KEY}引用剛剛添加了KEY'spot_address'('spot_address') – 2013-05-17 12:31:12

相關問題