2012-05-09 6 views
0

У меня есть две таблицы, которые я создал, и я добавляю ограничение внешнего ключа после факта.Внешний ключ не работает: Код ошибки 1005, состояние SQL HY000: невозможно создать таблицу

Эти две таблицы определены как таковые:

CREATE TABLE `user` (
    `user_id` int(11) NOT NULL auto_increment, 
    `user_ad_id` varchar(500) default NULL, 
    `user_name` varchar(100) NOT NULL, 
    `login_id` varchar(100) default NULL, 
    `email` varchar(256) NOT NULL, 
    `personal_config` int(10) NOT NULL, 
    PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

и

CREATE TABLE IF NOT EXISTS personal_config (
    config_id INT(10) NOT NULL AUTO_INCREMENT, 
    last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    configuration TEXT(25600) NOT NULL, 
    PRIMARY KEY (config_id) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE personal_config ADD CONSTRAINT personal_config_fk_user FOREIGN KEY 
(config_id) REFERENCES user(personal_config); 

И я получаю ту же ошибку, но не могу понять это. Я искал все связанные с этим темы.

+0

Где вы получите сообщение об ошибке, после первого CREATE TABLE или второй? –

+0

Обратите внимание, что ваш 'ALTER TABLE' кажется обратным. Поскольку 'config_id' является значением auto_increment,' user' должен иметь FK для personal_config, а не наоборот. –

+0

После второго. Таблицы создаются отлично, это просто таблица изменений, которая не работает. – MikeG

ответ

1

Ваше ALTER TABLE утверждение назад. Поскольку personal_config.config_id является первичным ключом auto_increment, внешний ключ должен быть определен в таблице users против personal_config, а не в personal_config против таблицы users.

ALTER TABLE users ADD CONSTRAINT user_fk_personal_config 
    FOREIGN KEY (personal_config) 
    REFERENCES personal_config(config_id); 
+0

Просто нужна вторая пара глаз. Хорошо, так что это имеет смысл и это исправляет. – MikeG

2

Ваш FK config_id не может быть полем автоинкремента, это не имеет большого смысла? Это поле отражает значение во внешней таблице, оно не может быть установлено произвольно в локальной таблице.

Я думаю, что это то, что вы хотите:

ALTER TABLE user ADD CONSTRAINT personal_config_fk_user FOREIGN KEY (personal_config) REFERENCES personal_config(config_id); 
0

если вы установите ваш пользователь поле таблицы personal_config является первичным ключом, то можно выполнить

CREATE TABLE IF NOT EXISTS personal_config (
    config_id INT(10) NOT NULL AUTO_INCREMENT, 
    last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    configuration TEXT(25600) NOT NULL, 
    PRIMARY KEY (config_id), FOREIGN KEY 
(config_id) REFERENCES user(personal_config) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 
Смежные вопросы