我有這個觸發器在MySQL簡單觸發器投擲的錯誤,並停止執行
DROP TRIGGER IF EXISTS BeforeGivingRight;
DELIMITER $$
CREATE TRIGGER BeforeGivingRight
BEFORE INSERT ON right_code
FOR EACH ROW
BEGIN
DECLARE num_rows INT NULL;
SELECT count(right_code) FROM valid_rights WHERE right_code =
new.user_right.right INTO num_rows;
IF num_rows = 0
THEN
set msg = concat('Error: That right is not allowed!',
cast(new.user_right.right as char));
signal sqlstate '45000' set message_text = msg;
END IF;
END $$
DELIMITER ;
及其給我這個錯誤
#1064 - You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near 'NULL; SELECT
count(right_code) FROM valid_rights WHERE right_code = new.user_' at line 5
這裏有什麼問題?我想要做的是,在插入一些權利(例如201)之前,使用觸發器檢查valid_rights
是否存在。
EDIT(回答)
所以,當你想要的trows異常觸發您使用此:
DROP TRIGGER IF EXISTS BeforeGivingRight;
DELIMITER $$
CREATE TRIGGER BeforeGivingRight
BEFORE INSERT ON user_rights
FOR EACH ROW
BEGIN
DECLARE num_rows INT DEFAULT NULL;
DECLARE msg VARCHAR(32) DEFAULT "";
SELECT count(valid_rights.right_code) FROM valid_rights WHERE right_code = new.right INTO num_rows;
IF num_rows = 0
THEN
set msg = concat('Error: That right is not allowed!', cast(new.right as char));
signal sqlstate '45000' set message_text = msg;
END IF;
END $$
DELIMITER ;
而不是編輯,你爲什麼不張貼與你的研究信息的新的答案,並選擇它作爲正確答案。 – manas