【问题记录】
使用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;