3

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

これを修正するにはどうすればよいですか? 私はそれを行う方法についていくつかのサイトを見ましたが、同じ結果が得られるので、ご容赦ください。

4

2 に答える 2

3

ITEM TABLE に CATEGORY_NAME 列を追加するか、外部キーを ITEM の別の既存の列にマップする必要があります。

また:

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);
于 2013-07-15T17:19:20.337 に答える
1

最初に別の変更ステートメントで列を追加する必要があります。

alter table item add column category_name varchar(35);

外部キー制約は、テーブル間の関係を作成するだけで、関連する列も作成しません。

于 2013-07-15T17:17:36.490 に答える