2013-10-05 2 views
0

Я получаюВнешняя ошибка клавишного 1215

код ошибки 1215 не может добавить ограничение внешнего ключа.

Когда я выхожу FOREIGN KEY (product_id) REFERENCES products(product_id) из кода, кажется, работает, но когда я добавляю его я получаю сообщение об ошибке.

CREATE SCHEMA `my_web_db`; 

USE my_web_db; 

DROP TABLE IF EXISTS USERS; 
DROP TABLE IF EXISTS DOWNLOADS; 
DROP TABLE IF EXISTS PRODUCTS; 

CREATE TABLE `my_web_db`.`USERS` (
    `user_id` INT NOT NULL , 
    `email_address` VARCHAR(100) NULL , 
    `first_name` VARCHAR(45) NULL , 
    `last_name` VARCHAR(45) NULL , 
    PRIMARY KEY (`user_id`)) 
DEFAULT CHARACTER SET = utf8; 

CREATE TABLE `my_web_db`.`DOWNLOADS` (
    `download_id` INT NOT NULL , 
    `user_id` INT , 
    `download_date` DATETIME NULL , 
    `filename` VARCHAR(45) NULL , 
    `product_id` INT NOT NULL, 
    PRIMARY KEY (`download_id`), 
    FOREIGN KEY (user_id) REFERENCES users(user_id), 
    FOREIGN KEY (product_id) REFERENCES products(product_id) 
) 
DEFAULT CHARACTER SET = utf8; 

CREATE TABLE `my_web_db`.`PRODUCTS` (
    `product_id` INT NOT NULL , 
    `product_name` VARCHAR(45) NULL , 
    PRIMARY KEY (`product_id`) 
) 
DEFAULT CHARACTER SET = utf8; 
+0

Перед тем, как изменять или отбрасывать таблицы, попробуйте освободить отношения. – zkanoca

+1

Вы пытались переместить «создать таблицу» для продуктов до «Создать таблицу» для загрузки? –

ответ

0

Я думаю, что ваш вы используете ENGINE = MyISAM, вы должны использовать ENGINE = InnoDB для создания внешнего ключа ссылки.

Номер ДВИГАТЕЛЯ. Обновлено SQL:

CREATE TABLE `my_web_db`.`USERS` (
    `user_id` INT NOT NULL , 
    `email_address` VARCHAR(100) NULL , 
    `first_name` VARCHAR(45) NULL , 
    `last_name` VARCHAR(45) NULL , 
    PRIMARY KEY (`user_id`)) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8; 

CREATE TABLE `my_web_db`.`PRODUCTS` (
    `product_id` INT NOT NULL , 
    `product_name` VARCHAR(45) NULL , 
    PRIMARY KEY (`product_id`) 
)ENGINE=InnoDB DEFAULT CHARACTER SET = utf8; 

CREATE TABLE `my_web_db`.`DOWNLOADS` (
    `download_id` INT NOT NULL , 
    `user_id` INT , 
    `download_date` DATETIME NULL , 
    `filename` VARCHAR(45) NULL , 
    `product_id` INT NOT NULL, 
    PRIMARY KEY (`download_id`), 
    FOREIGN KEY (user_id) REFERENCES users(user_id), 
    FOREIGN KEY (product_id) REFERENCES products(product_id) 
) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8; 
+1

Да, MyISAM не поддерживает FK, но AFAIK теперь движком по умолчанию является InnoDB .. Или он получит ошибку также для user_id FK, нет? –

+0

И MyISAM просто анализирует и игнорирует FK, это не вызывает никаких ошибок. –

+0

Объяснение в этом ответе неверно, но код верен. Сначала СОЗДАЙТЕ таблицы «Пользователи» и «Продукты», а затем «Загрузки», которые ссылаются на предыдущие 2 таблицы. –

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