2013-11-21 111 views
1

當我嘗試創建一個名爲Sales的表時,MySQL會給出以下錯誤。我不知道問題出在哪裏,我瞥了一眼http://dev.mysql.com/doc/refman/4.1/en/innodb-foreign-key-constraints.html,看看我犯了什麼錯誤,但我無法說清楚。 我得到這個錯誤在MySQL 5.6.11,但不是在67年5月1日無法添加外鍵約束

Error 
SQL query: 

CREATE TABLE IF NOT EXISTS Sales(

name VARCHAR(30) NOT NULL , 
address VARCHAR(70) NOT NULL , 
serialsold VARCHAR(20) UNIQUE NOT NULL , 
background_check VARCHAR(9) NOT NULL , 
soldfor FLOAT NOT NULL , 
datesold TIMESTAMP DEFAULTNOW() , 
FOREIGN KEY (serialsold) REFERENCES Guns(serialnumber) ON DELETE SET NULL ON UPDATE CASCADE , 
PRIMARY KEY (background_check) 
); 

MySQL said: Documentation 

#1215 - Cannot add foreign key constraint 

我的槍和購買表格:

CREATE TABLE IF NOT EXISTS Purchases 
(
    name   VARCHAR(30) NOT NULL, 
    address  VARCHAR(70) NOT NULL, 
    serialbought VARCHAR(20) UNIQUE NOT NULL, 
    boughtfor  FLOAT, 
    datebought TIMESTAMP DEFAULT NOW(), 
    PRIMARY KEY (serialbought) 
); 

CREATE TABLE IF NOT EXISTS Guns 
( 
    sequence  INTEGER(4) NOT NULL AUTO_INCREMENT, 
    manufacturer VARCHAR(30) NOT NULL, 
    model   VARCHAR(20) NOT NULL, 
    caliber  VARCHAR(10) NOT NULL, 
    serialnumber VARCHAR(20) UNIQUE NOT NULL, 
    type   VARCHAR(10) NOT NULl, 
    sellsfor  FLOAT DEFAULT NULL, 
    FOREIGN KEY (serialnumber) REFERENCES Purchases(serialbought) 
    ON DELETE RESTRICT ON UPDATE RESTRICT, 
    PRIMARY KEY (sequence) 
); 
+1

請出示您的「槍」表 – peterm

+0

其中一個原因可能是您創建表的系列*(在父母之前創建子女)*在您的DDL腳本開始處設置'foreign_key_checks = 0'。所以按創作順序不會產生問題。 – SajjadHashmi

+0

我已經嘗試過了,它不起作用。我先創建了購買,然後是槍支,然後嘗試了銷售,但它不起作用。 – user3015939

回答

8

你定義一個字段serialsold不爲空 -

serialsold VARCHAR(20) UNIQUE NOT NULL 

但是然後您嘗試使用SET NULL子句添加操作 -

ON DELETE SET NULL 

更改其中一個選項並嘗試創建表格。

+0

工作,謝謝。 – user3015939

+1

@ user3015939如果這對你有用,請將答案標記爲** [接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)**。 – peterm