如何向现有的表添加外键?
如何向现有的表添加外键?
我正在尝试将Category_Name作为外键添加到ITEM表中。Category_Name存在于CATEGORY表中,这是我得到的结果:
mysql> use acmeonline; 数据库已更改 mysql> show tables; +----------------------+ | Tables_in_acmeonline | +----------------------+ | category | | item | +----------------------+ 2行(0.00秒) 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行(0.07秒) 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行(0.01秒) 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
如何修复这个问题?请耐心等待,因为我确实查看了一些关于如何解决该问题的网站,但结果都是一样的。
在现有的表中添加外键的原因是需要在ITEM表中添加CATEGORY_NAME列,或者将外键映射到ITEM中的另一列。解决方法可以是通过ALTER TABLE语句添加新列和外键约束,或者通过ALTER TABLE语句将外键映射到ITEM中的其他已存在的列。
以下是具体的解决方法:
1. 在ITEM表中添加CATEGORY_NAME列,并添加外键约束:
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);
2. 将外键映射到ITEM中的其他已存在的列:
ALTER TABLE ITEM ADD CONSTRAINT FK_CATEGORY_NAME FOREIGN KEY (SOME_OTHER_EXISTING_COLUMN) REFERENCES CATEGORY (CATEGORY_NAME);
以上就是如何在现有表中添加外键的解决方法。