2011-12-13 7 views
0

Я пытаюсь добавить внешний ключ с помощью MySQL Workbench. Я создал новую таблицу и нажал вкладку внешних ключей, и она показывает столбцы. Но флажок не активирован. Столбец является типом данных INT для обеих таблиц. Не могли бы вы предложить, что может быть неправильным? Я ценю любую помощь.Не удалось добавить внешний ключ в mysql

CREATE TABLE `temp_table1` (
    `t_id` int(10) unsigned NOT NULL, 
    `t_name` varchar(45) default NULL, 
    PRIMARY KEY (`t_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ 


CREATE TABLE `new_table` (
    `newid` int(11) NOT NULL, 
    `t_id` int(10) NOT NULL, 
    PRIMARY KEY (`newid`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ 
+0

является столбцом первичного ключа на ссылке, на которую ссылаются? Показывая, что фактическая схема была бы полезна. – stew

+0

Да, это первичный ключ. – nav100

+0

Какой механизм хранения вы используете для таблиц? Обратите внимание, что InnoDB - это механизм хранения * только * MySQL, который поддерживает ограничения внешнего ключа. (См. Http://dev.mysql.com/doc/refman/5.6/en/ansi-diff-foreign-keys.html.) – ruakh

ответ

3

Хотя оба столбца типа INT, один из них unsigned, а также. Они должны быть как unsigned для установления иностранного ключа.

CREATE TABLE `temp_table1` (
    `t_id` int(10) unsigned NOT NULL, 
    `t_name` varchar(45) default NULL, 
    PRIMARY KEY (`t_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ 


CREATE TABLE `new_table` (
    `newid` int(11) NOT NULL, 
    `t_id` int(10) unsigned NOT NULL, 
    --------------^^^^^^^^^^ 
    -- Must be unsigned... 
    PRIMARY KEY (`newid`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ 
+0

Спасибо, Майкл. Ты прав! – nav100

0

Внешний ключ должен быть того же типа, что и ссылочный столбец. Вам нужно будет сделать t_id без знака в таблице с внешним ключом.

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