使用INSERT和SIGNAL进行BEFORE INSERT时,MySQL触发器将无效

时间:2016-06-29 23:31:12

标签: mysql triggers

CREATE TABLE `tbl_backup` (
  `user_email` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `users` (
  `user_email` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DELIMITER ;;

CREATE TRIGGER `dousers` BEFORE INSERT ON `users` FOR EACH ROW
BEGIN
IF LOWER(NEW.user_email) LIKE '%@test.pl' THEN
     INSERT INTO tbl_backup (`user_email`) VALUES (NEW.user_email);
     SIGNAL SQLSTATE '45000' SET message_text = 'Strange error!';
END IF;

END;;

DELIMITER ;

触发工作,但只有一半。当条件满足时,我得到错误(这个在触发器Strange error!中定义),但INSERT INTO tbl_backup不起作用。我在tbl_backup表中没有新记录。如果我从触发器中删除SIGNAL SQLSTATE,那么当条件满足时,我会在tbl_backup中看到新记录。我还使用较早的MySQL 5.1和call some_non_exist_function来测试此触发器,它就像一个魅力。我做错了或在MySQL 5.5中我不能在单个触发器中使用INSERTSIGNAL? MySQL ver 5.5.45

0 个答案:

没有答案