伙计们!我想要在一个触发器中执行多个动作,但它不起作用。有人能帮忙吗?问题出在哪里?我的错误在哪里?请帮帮忙。
DROP TRIGGER IF EXISTS `usertrigger` ;
CREATE DEFINER = `cmsbalti`@`localhost` TRIGGER `usertrigger`
BEFORE DELETE ON `users`
FOR EACH ROW
INSERT INTO `del_users` (fullname)
VALUES (old.fullname)
BEFORE INSERT ON `del_users` FOR EACH ROW
BEGIN
DELETE FROM `gallery`
WHERE uid = old.id;
END谢谢。
发布于 2014-02-28 14:39:35
作为一个解决办法,我不会使用触发器!!只需修改您的设计并添加一个ON UPDATE CASCADE约束,这样就只需要一个操作,因为约束将完成其余的操作。有关更多细节,请查看此链接。
作为触发器选项
只有一个动作触发是可能的。以使其易于理解,例如:
mysql> CREATE TABLE actor(
actor_id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR(45) NOT NULL,
last_name VARCHAR(45) NOT NULL,
last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (actor_id),
INDEX idx_actor_last_name (last_name)
);创建第一个触发器:
mysql> DELIMITER $$
mysql>
mysql> CREATE TRIGGER trigger1
-> AFTER INSERT
-> ON actor
-> FOR EACH ROW
-> BEGIN
-> -- code
-> END
-> $$
Query OK, 0 rows affected (0.00 sec)创建第二个触发器:
mysql> CREATE TRIGGER trigger2
-> AFTER UPDATE
-> ON actor
-> FOR EACH ROW
-> BEGIN
-> -- code
-> END
-> $$
Query OK, 0 rows affected (0.00 sec)创建第三个动作triger :
mysql> CREATE TRIGGER trigger3
-> AFTER DELETE
-> ON actor
-> FOR EACH ROW
-> BEGIN
-> -- code
-> END
-> $$
DELIMITER ;Query OK, 0 rows affected (0.01 sec)现在让我们尝试使用与第一个触发器相同的操作来创建一个Fort触发器
mysql> CREATE TRIGGER trigger11
-> AFTER INSERT
-> ON actor
-> FOR EACH ROW
-> BEGIN
-> -- code
-> END
-> $$
ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'因此,故事的结束--您不能用编写它的方式创建触发器--创建两个不同的触发器,因为事件不同。
因此,我的建议是在该表上创建两个触发器,并确保将它们放置在块中,以避免在执行级别出现问题(极小的机会)。
发布于 2014-02-28 16:51:22
BEGIN ... END触发器中使用DELETE块,并在del_users中插入审计记录并从gallery中删除相关记录。不要忘记在mysql客户机中更改DELIMITER。BEFORE事件作为触发器,因为必须在删除父记录之前删除子记录。据说你的扳机看起来就像
DELIMITER //
CREATE TRIGGER tg_ad_users
BEFORE DELETE ON users
FOR EACH ROW
BEGIN
INSERT INTO del_users (user_id, fullname, deleted)
VALUES (OLD.id, OLD.fullname, NOW());
DELETE FROM gallery
WHERE uid = OLD.id;
END//
DELIMITER ;这是SQLFiddle演示
https://stackoverflow.com/questions/22097418
复制相似问题