0
点赞
收藏
分享

微信扫一扫

【MySQL】受外键约束的影响截断表时失败的解决办法

西特张 2022-04-29 阅读 198

【问题记录】
使用truncate 表名语句删除表中记录时报如下错误:



【错误原因】

这是因为我们的表中的某些字段受到了外键约束的影响,如下:

CREATE TABLE `reserve_tables` (
  `reserve_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '预约单号',
  `patient_identity` varchar(255) DEFAULT NULL COMMENT '患者身份证号',
  `department_id` varchar(255) DEFAULT NULL COMMENT '预约的科室编号',
  `doctor_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT 'D0000001' COMMENT '预约的医生工号',
  `reserve_type` int(11) DEFAULT '1' COMMENT '预约类型1科室,0专家',
  `reserve_state` int(11) DEFAULT '0' COMMENT '预约状态,0待确认,1已完成,-1已取消',
  `reserve_time` datetime DEFAULT NULL COMMENT '预约时段的起始时间',
  PRIMARY KEY (`reserve_id`),
  KEY `patient_identity` (`patient_identity`),
  KEY `department_id` (`department_id`),
  KEY `doctor_id` (`doctor_id`),
  CONSTRAINT `reserve_tables_ibfk_1` FOREIGN KEY (`patient_identity`) REFERENCES `patients` (`patient_identity`),
  CONSTRAINT `reserve_tables_ibfk_2` FOREIGN KEY (`department_id`) REFERENCES `departments` (`department_id`),
  CONSTRAINT `reserve_tables_ibfk_3` FOREIGN KEY (`doctor_id`) REFERENCES `doctors` (`doctor_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='预约记录表';


【解决办法】

在使用truncate 表名语句删除表中记录之前跳过外键检查,截断完后再恢复即可:

SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE 表名; 
SET FOREIGN_KEY_CHECKS = 1;
举报

相关推荐

0 条评论