使外键指向mysql中的唯一索引列

时间:2018-11-17 09:01:57

标签: mysql

产品

CREATE TABLE if NOT EXISTS `PRODUCTS` (
   `ID` INT unsigned NOT NULL AUTO_INCREMENT,
   `COMPANY_ID` INT(10) unsigned NOT NULL,
   `PRODUCT_CODE` VARCHAR(5) NOT NULL,
   `PRODUCT_NAME` VARCHAR(15) NOT NULL,
   `UNIT_TYPE` VARCHAR(1) NULL,
   UNIQUE INDEX UNIQUE_COMAPNY_PRODUCT_CODE (`COMPANY_ID`, `PRODUCT_CODE`),
   CONSTRAINT `PRODUCT_COMPANY_ID_FK` FOREIGN KEY (`COMPANY_ID`) REFERENCES `companies` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
)

,我想对上层“ PRODUCT_CODE”做一个外键…… 这是我的代码

ALTER TABLE services
ADD COLUMN `PRODUCT_CODE` VARCHAR(5),
// ADD foreign `PRODUCT_CODE` that refrences to `PRODUCT_CODE` in PRODUCTS table

那么如何在mysql中做上面的注释行?

1 个答案:

答案 0 :(得分:1)

在外键中引用的列可以是主键或唯一键。您需要首先在PRODUCT_CODE上添加索引。我把它当作UNIQUE

ALTER TABLE PRODUCTS ADD UNIQUE INDEX (PRODUCT_CODE);

然后,您可以使用ALTER TABLE .. ADD FOREIGN KEY语法:

ALTER TABLE services
ADD FOREIGN KEY (PRODUCT_CODE) REFERENCES PRODUCTS(PRODUCT_CODE); 

将此与您现有的ALTER TABLE查询结合起来,一个查询如下所示:

ALTER TABLE services
ADD COLUMN `PRODUCT_CODE` VARCHAR(5),
ADD FOREIGN KEY (PRODUCT_CODE) REFERENCES PRODUCTS(PRODUCT_CODE); 

如果services表中已经有一些数据,这些数据具有某些PRODUCT_CODE值,而这些数据在PRODUCTS表中不存在。您将收到以下错误:

  

错误代码:1215。无法添加外键约束

在这种情况下,您将需要修复表中的数据。您可以查看此答案以获取提示:https://stackoverflow.com/a/53099922/2469308