假设我有以下架构:
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`)
);
用户只有一个历史记录,没有历史记录指向用户的目的是许多其他表(此模式中未提及)也有历史记录。
最简单的方法是删除用户还会删除其历史记录吗?
答案 0 :(得分:4)
你可以使用这样的触发器:
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 ;
答案 1 :(得分:1)
我认为你不能在这里使用外键来级联删除,因为数据类型不匹配。一个表中有VARCHAR(255),另一个表中有INT(10)。 (那是怎么回事?)
我认为你必须使用触发器或存储过程,这两者都不是完全令人满意的。触发器在理论上是最安全的,因为客户端代码不能潜行它们。 (客户端代码可以避免调用存储过程。)但是有APIs that don't activate MySQL triggers。
MySQL触发器由SQL激活 只有陈述。他们不是 由表格的变化激活 不传输SQL的API MySQL服务器的语句
答案 2 :(得分:0)
如果用户历史是1-1关系,你可以将约束放在用户表中,而不是放在'hisories'中