【问题标题】:MySQL error: Missing index for constraintMySQL错误:缺少约束索引
【发布时间】:2018-09-01 18:37:59
【问题描述】:

我正在我的数据库中创建 2 个表:

DROP TABLE IF EXISTS `med_pharmacy`;
CREATE TABLE IF NOT EXISTS `med_pharmacy` (
  `med_pharmacy_id` int(11) NOT NULL AUTO_INCREMENT,
  `med_id` int(11) NOT NULL,
  `med_barcode` varchar(45) DEFAULT NULL,
  `med_received` date DEFAULT NULL,
  `med_expiry` date DEFAULT NULL,
  `med_tablet` int(11) DEFAULT NULL,
  `med_pill` int(11) DEFAULT NULL,
  `clinic_id` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`med_pharmacy_id`),
  KEY `fk_med_pharmacy_medication1_idx` (`med_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1261 DEFAULT CHARSET=utf8mb4;

与:

DROP TABLE IF EXISTS `medication`;

CREATE TABLE `medication` (
  `med_id` int(11) NOT NULL,
  `med_name` varchar(75) NOT NULL,
  `med_date_added` date DEFAULT NULL,
  `clinic_id` varchar(45) DEFAULT NULL,
  `med_type` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

当我在 wamp 中运行查询时,我得到了这个错误:

SQL 查询:

ALTER TABLE `med_pharmacy`   
ADD CONSTRAINT `fk_med_pharmacy_medication1` 
FOREIGN KEY (`med_id`) 
REFERENCES
`medication` (`med_id`) ON DELETE CASCADE ON UPDATE CASCADE MySQL

说:文档

#1822 - 添加外键约束失败。引用表中的约束“fk_med_pharmacy_medication1”缺少索引 '药物'

表格已经存在,但我更改了一个字段。

【问题讨论】:

    标签: mysql sql phpmyadmin wampserver


    【解决方案1】:

    外键引用的列必须被索引。您需要在medication.med_id 上添加索引。实际上,这应该是表的主键。

    ALTER TABLE medication ADD PRIMARY KEY (med_id);
    

    【讨论】:

    • 但我的 sql 脚本中已经包含以下内容:ALTER TABLE drug` ADD PRIMARY KEY (med_id);`
    • 我怀疑你有那个你尝试添加外键。它必须在它之前。
    • 是的,我认为
    • 你为什么不把这些东西放在你的CREATE TABLE查询中,而不是用ALTER TABLE单独做呢?
    • 因为我从 phpmyadmin 导出了 sql 文件。我和你一样感到惊讶。
    【解决方案2】:

    如果你给了

    ADD CONSTRAINT `fk_med_pharmacy_medication1` 
    FOREIGN KEY (`med_id`) 
    

    FOREIGN KEY 约束不必只链接到另一个表中的 PRIMARY KEY 约束;它也可以定义为引用另一个表中唯一约束的列。

    所以med_id 应该在medication 中有primary key 或引用唯一约束的列

    【讨论】:

    • 但我的 sql 脚本中已经包含以下内容:ALTER TABLE medication` ADD PRIMARY KEY (med_id);`
    • 不,它没有。
    猜你喜欢
    • 2021-09-19
    • 2017-09-16
    • 2014-12-07
    • 2016-05-23
    • 2019-12-30
    • 2019-02-27
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    相关资源
    最近更新 更多