我是否需要复制我的触发器以覆盖之前的插入和更新前的情况?

时间:2018-02-07 19:41:51

标签: mysql sql triggers

我创建了一些触发器来进行一些简单的验证。我介绍了插入前的场景,例如:

CREATE TRIGGER TR_before_insert_login
BEFORE INSERT ON login
FOR EACH ROW
BEGIN


   IF (CHAR_LENGTH(NEW.password) < 4 OR  CHAR_LENGTH(NEW.password) > 10) THEN
     SIGNAL SQLSTATE '42000'
        SET MESSAGE_TEXT = 'password must be between 4 e 10 characters';
    END IF;
 ......

但是如果用户执行更新,我无法阻止它输入错误的数据。我是否需要创建更新之前并复制我的验证代码,或者有更好的方法来执行此操作。

2 个答案:

答案 0 :(得分:0)

为什么不将逻辑(您的验证码)放入procedure并在单独的触发器(插入/更新)中执行。

-- pseudo code
create procedure PASSWORD_VALIDATION(_psswd) { /* validation */ };
create trigger table_ub BEFORE UPDATE { CALL PASSWORD_VALIDATION(NEW.password);};
create trigger table_ib BEFORE INSERT { CALL PASSWORD_VALIDATION(NEW.password);};

因此,您的验证代码不会重复。

答案 1 :(得分:0)

ALTER TRIGGER [dbo].[trigger_name]
    ON [dbo].[table_name]
    FOR DELETE, INSERT, UPDATE
    AS
    BEGIN
           'your code here'
    END

你可以使用这样的结构来调用插入,更新和删除的相同触发器