有一个orders表,另一个是order_items表,order_items表的order_id是orders表的id,现在想要在某个order记录被删除的时候,与之相关的order_item要被数据库自动删除。
方案,在order_items表中添加一个外键约束,设置on delete为cascade级联删除,根据mysql官方文档的描述,目前只有InnoDB这个数据库引擎支持外键约束。Foreign key constraints are supported for the InnoDB storage engine only. For other storage engines, the foreign key syntax is correctly parsed but not implemented.
容易忽略的点1:当order_items表中有order表不存在的id时,索引无法建立(已有数据不满足约束条件,无法在此基础上建立外键约束)
容易忽略的点2: 在插入数据时,应注意插入顺序,order_items不能引用order表中没有的id,所以ord要要先插入order表,再插入order_item表。
容易忽略的点3: order_items中的外键属性必须要有一个索引,比如index类型的索引
容易踩到的坑:
原本来说,在mysql workbench中点点鼠标即可完成以上操作,但是在进行添加外键时
,mysql workbench容易抽风,此时可用命令手动执行:
ALTER TABLE `wxmall`.`order_items`
ADD CONSTRAINT `fk_order_id`
FOREIGN KEY (`order_id`)
REFERENCES `wxmall`.`orders` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION;
网友评论