【问题标题】:How to add a foreign key to an existing table?如何将外键添加到现有表?
【发布时间】:2013-07-13 15:40:41
【问题描述】:

我正在尝试将 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

我该如何解决这个问题?请耐心等待,因为我确实查看了一些有关如何操作的网站,但我得到了相同的结果。

【问题讨论】:

标签: mysql sql database foreign-keys


【解决方案1】:

您必须先将该列添加到单独的alter statement

alter table item add column category_name varchar(35);

外键约束只创建表之间的关系 - 它们不会创建所涉及的列。

【讨论】:

    【解决方案2】:

    您需要在 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);
    

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 2014-02-20
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2010-12-25
      相关资源
      最近更新 更多