【问题标题】:Integrity constraint violation while adding into database添加到数据库时违反完整性约束
【发布时间】:2017-11-26 22:11:01
【问题描述】:

当我使用 PHP 和 Ajax 形式向 mysql 添加数据时出现以下错误:

SQLSTATE[23000]:违反完整性约束:1452 无法添加或 更新子行:外键约束失败 (ncd.patient_med_history, 约束 fk_patient_medication_patient1 外键 (patient_id) 参考 patient (patient_id) ON DELETE CASCADE ON UPDATE CASCADE)

这是两个表:

CREATE TABLE IF NOT EXISTS `ncd`.`patient` (
  `patient_id` VARCHAR(45) NOT NULL,
  `patient_name_en` VARCHAR(55) CHARACTER SET 'utf8mb4' COLLATE
  `patient_status` VARCHAR(15) NULL,
  PRIMARY KEY (`patient_id`),
  INDEX `fk_patient_clinic1_idx` (`clinic_id` ASC),
  CONSTRAINT `fk_patient_clinic1`
    FOREIGN KEY (`clinic_id`)
    REFERENCES `ncd`.`clinic` (`clinic_id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

这里是外键所在的另一个表:

CREATE TABLE IF NOT EXISTS `ncd`.`patient_med_history` (
  `patient_medication_id` INT NOT NULL AUTO_INCREMENT,
  `patient_medication` VARCHAR(55) NULL,
  `disease` VARCHAR(80) NULL,
  `patient_id` VARCHAR(45) NOT NULL,
  `clinic_id` VARCHAR(45) NULL,
  PRIMARY KEY (`patient_medication_id`),
  INDEX `fk_patient_medication_patient1_idx` (`patient_id` ASC),
  CONSTRAINT `fk_patient_medication_patient1`
    FOREIGN KEY (`patient_id`)
    REFERENCES `ncd`.`patient` (`patient_id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

附言

添加了 3 行之后,我遇到了这个错误,不再添加任何行

【问题讨论】:

  • 向我建议在添加 3 行之后添加了约束。
  • 您是否正在尝试删除patient_med_history 上的某些注册表并发生这种情况?尝试从该表中删除ON DELETE CASCADE并重复操作

标签: mysql sql


【解决方案1】:

Integrity Constraint 错误发生时,意味着您有一个表,该表的字段具有 FK 到另一个表,因此您正在尝试在其中添加一个值此字段在其他表中不存在。

当您改为删除时,如果您不先从父级删除,则无法从具有 FK 的子级中删除。

【讨论】:

    猜你喜欢
    • 2015-03-30
    • 2020-01-14
    • 1970-01-01
    • 2021-12-13
    • 2017-10-01
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多