1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > mysql级联删除外键约束_mysql通过外键级联删除

mysql级联删除外键约束_mysql通过外键级联删除

时间:2021-01-18 02:10:58

相关推荐

mysql级联删除外键约束_mysql通过外键级联删除

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

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

CREATETABLE`personal_schedule`(

`id`int(11)NOTNULLAUTO_INCREMENT,

`employee_id`int(11)DEFAULTNULLCOMMENT'员工id',

`law_schedule_id`int(11)DEFAULTNULLCOMMENT'规律班次ID,为0时为批量导入',

`start_time`dateDEFAULTNULLCOMMENT'开始时间',

`end_time`dateDEFAULTNULLCOMMENT'结束时间',

`memo`varchar(100)DEFAULTNULLCOMMENT'备注',

PRIMARYKEY(`id`)

)ENGINE=InnoDBAUTO_INCREMENT=9666DEFAULTCHARSET=utf8

该表记录了员工employee_id从start_time到end_time期间的考勤班次law_schedule_id。

从表(排班明细表)

CREATETABLE`personal_schedule_details`(

`id`int(11)NOTNULLAUTO_INCREMENT,

`personal_schedule_id`int(11)NOTNULLCOMMENT'个人排班id',

`date`dateDEFAULTNULLCOMMENT'日期',

`attendance_schedule_id`int(11)DEFAULTNULLCOMMENT'基本班次id',

PRIMARYKEY(`id`),

KEY`personal_schedule_id`(`personal_schedule_id`)USINGBTREE,

CONSTRAINT`personal_schedule_details_ibfk_1`FOREIGNKEY(`personal_schedule_id`)REFERENCES`personal_schedule`(`id`)ONDELETECASCADE

)ENGINE=InnoDBAUTO_INCREMENT=1441179DEFAULTCHARSET=utf8

记录的是主表中从start_time到end_time期间每一天的考勤班次(也就是主表记录时间段,从表记录每一天)

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。