2013-07-15 5 views
2

Я пытаюсь добавить Category_Name в качестве внешнего ключа в таблицу ITEM. Category_Name существует в таблице CATEGORY, и это то, что я получаю:Как добавить внешний ключ в существующую таблицу?

mysql> use acmeonline; 
Database changed 
mysql> show tables; 
+----------------------+ 
| Tables_in_acmeonline | 
+----------------------+ 
| category    | 
| item     | 
+----------------------+ 
2 rows in set (0.00 sec) 

mysql> describe item; 
+-------------+--------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+-------------+--------------+------+-----+---------+-------+ 
| Item_Number | int(11)  | NO | PRI | 0  |  | 
| Item_Name | varchar(35) | YES |  | NULL |  | 
| Model_Num | varchar(15) | YES |  | NULL |  | 
| Description | varchar(255) | YES |  | NULL |  | 
| Price  | double(8,2) | YES |  | NULL |  | 
+-------------+--------------+------+-----+---------+-------+ 
5 rows in set (0.07 sec) 

mysql> describe category; 
+------------------+-------------+------+-----+---------+-------+ 
| Field   | Type  | Null | Key | Default | Extra | 
+------------------+-------------+------+-----+---------+-------+ 
| Category_Name | varchar(35) | NO | PRI |   |  | 
| ShippingPerPound | double(4,2) | YES |  | NULL |  | 
| DiscountAllowed | char(1)  | YES |  | NULL |  | 
+------------------+-------------+------+-----+---------+-------+ 
3 rows in set (0.01 sec) 

mysql> ALTER TABLE item 
-> ADD CONSTRAINT fk_category_name 
-> FOREIGN KEY(Category_Name) 
-> REFERENCES Category(Category_Name); 
ERROR 1072 (42000): Key column 'Category_Name' doesn't exist in table 

Как исправить это? Пожалуйста, несите меня, потому что я смотрел на некоторые сайты о том, как это сделать, но я получаю те же результаты.

+0

вы найдете ответ на свой вопрос здесь http://stackoverflow.com/questions/10028214/add-foreign-key-to-existing-table – Marek

ответ

3

Вам нужно добавить столбец CATEGORY_NAME в ITEM TABLE или сопоставить внешний ключ с другим существующим столбцом в ПУНКТЕ.

Либо:

ALTER TABLE ITEM 
ADD CATEGORY_NAME VARCHAR(35) NOT NULL; 

ALTER TABLE ITEM 
ADD CONSTRAINT FK_CATEGORY_NAME 
FOREIGN KEY (CATEGORY_NAME) 
REFERENCES CATEGORY (CATEGORY_NAME); 

ИЛИ

ALTER TABLE ITEM 
ADD CONSTRAINT FK_CATEGORY_NAME 
FOREIGN KEY (SOME_OTHER_EXISTING_COLUMN) 
REFERENCES CATEGORY (CATEGORY_NAME); 
+0

Спасибо, сейчас работает! – TheAmazingKnight

1

Вы должны сначала добавить столбец в отдельном alter statement:

alter table item add column category_name varchar(35); 

ключевые Зарубежное ограничения только создать связь между таблицами - они также не создают столбец (ы), участвующих.