mysql通过外键级联删除

mysql 可通过外键约束,实现数据的级联更新或者删除。

例如有主表(员工排班表):

CREATE TABLE `personal_schedule` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `employee_id` int(11) DEFAULT NULL COMMENT '员工id',
  `law_schedule_id` int(11) DEFAULT NULL COMMENT '规律班次ID,为0时为批量导入',
  `start_time` date DEFAULT NULL COMMENT '开始时间',
  `end_time` date DEFAULT NULL COMMENT '结束时间',
  `memo` varchar(100) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9666 DEFAULT CHARSET=utf8
该表记录了员工employee_id从start_time到end_time期间的考勤班次law_schedule_id。

从表(排班明细表)

CREATE TABLE `personal_schedule_details` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `personal_schedule_id` int(11) NOT NULL COMMENT '个人排班id',
  `date` date DEFAULT NULL COMMENT '日期',
  `attendance_schedule_id` int(11) DEFAULT NULL COMMENT '基本班次id',
  PRIMARY KEY (`id`),
  KEY `personal_schedule_id` (`personal_schedule_id`) USING BTREE,
  CONSTRAINT `personal_schedule_details_ibfk_1` FOREIGN KEY (`personal_schedule_id`) REFERENCES `personal_schedule` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1441179 DEFAULT CHARSET=utf8
记录的是主表中从start_time到end_time期间每一天的考勤班次(也就是主表记录时间段,从表记录每一天)

 

当主表中的排班信息删除时,须同步删除期间每一天的记录。因此在从表的personal_schedule_id列创建外键,对应主表personal_schedule的id列,并设置为ON DELETE CASCADE表示串联删除。

如果表中已有数据,创建外键时可能会报错:Cannot add or update a child row: a foreign key constraint fails...

出现这一错误表示这两个表中有不满足外键约束的数据,即,从表中的personal_schedule_id未出现在主表personal_schedule中。可先删除不满足条件的数据再创建外键。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值