2013-11-21 4 views
1

Когда я пытаюсь создать таблицу под названием Sales, MySQL дает следующую ошибку. Я не могу сказать, в чем проблема, и я взглянул на http://dev.mysql.com/doc/refman/4.1/en/innodb-foreign-key-constraints.html, чтобы узнать, какую ошибку я сделал, но я не могу сказать. Я получаю эту ошибку в MySQL 5.6.11, но не в 5.1.67Невозможно добавить ограничение внешнего ключа

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

Пожалуйста, покажите свою таблицу «Guns» – peterm

+0

. Одной из причин может быть серия, в которой вы создаете таблицы * (создание дочерних элементов перед родителями). * Установите 'foreign_key_checks = 0' в начале вашего сценария DDL. порядок по созданию не создает проблемы. – 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

Смежные вопросы