假设我有以下模式:
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`)
);一个用户只有一条历史记录,不让历史记录指向用户的目的是让许多其他表(在此模式中没有提到)也有历史记录。
最简单的方法是让删除用户也会删除其历史记录吗?
发布于 2011-04-08 12:26:00
您可以像这样使用触发器:
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 ;发布于 2011-04-06 16:43:43
我不认为您可以在这里使用外键来级联删除,因为数据类型不匹配。一个表中有VARCHAR(255),另一个表中有INT(10)。(这是怎么回事?)
我认为您必须使用触发器或存储过程,这两种方法都不能完全令人满意。理论上,触发器是最安全的,因为客户端代码不能偷偷绕过它们。(客户端代码可以避免调用存储过程。)但也有APIs that don't activate MySQL triggers。
MySQL触发器仅由SQL语句激活。它们不会通过不将SQL语句传输到MySQL服务器
的API所做的表更改来激活
发布于 2011-04-06 08:28:28
如果用户历史是1-1关系,则可以将约束放在用户表中,而不是放在'hisories‘表中
https://stackoverflow.com/questions/5560172
复制相似问题