ON DELETE CASCADE 的反转

Fra*_*rth 7 mysql sql database database-design

假设我有以下架构:

CREATE TABLE `users` (
  `id` int(10) unsigned auto_increment,
  `historyId` varchar(255),
  PRIMARY KEY  (`id`)
);

CREATE TABLE `histories` (
  `id` int(10) unsigned auto_increment,
  `history` TEXT,
  PRIMARY KEY  (`id`)
);
Run Code Online (Sandbox Code Playgroud)

一个用户只有一个历史记录,没有指向用户的历史记录的目的是许多其他表(在这个模式中没有提到)也有历史记录。

使删除用户也将删除其历史记录的最简单方法是什么?

neo*_*ble 5

您可以像这样使用触发器:

DELIMITER $$
CREATE TRIGGER delete_user_history_on_delete_user
AFTER DELETE ON `users`
FOR EACH ROW
BEGIN
DELETE FROM `histories` WHERE id = old.historyId;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)


Art*_*Ale 0

如果用户历史记录是 1-1 关系,您可以将约束放在用户表中,而不是放在“历史记录”表中