我创建了一些触发器来进行一些简单的验证。我介绍了插入前的场景,例如:
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;
......
但是如果用户执行更新,我无法阻止它输入错误的数据。我是否需要创建更新之前并复制我的验证代码,或者有更好的方法来执行此操作。
答案 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
你可以使用这样的结构来调用插入,更新和删除的相同触发器