我试图创造(我认为)应该是一个基本触发器。
基本上如果有人试图为触发范围之外的记录设置一个值,那么它将拒绝更新。
表名为:人
相关领域是:年龄(国际)
CREATE TRIGGER max_age_trigger BEFORE UPDATE
ON People
FOR EACH ROW
BEGIN
IF People.age <0 OR People.age>150 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = `Error: The age is out of range (0 > 150)`;
END IF;
END
MySQL在第7行引发了错误。但是,我并不了解我出错的地方。我是触手可及者的新手,但我仍然不知所措。
#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以获得在&#39;&#39;附近使用的正确语法。第7行
如果您可以帮助/协助我使用我的代码,那将会有很大的帮助:)
答案 0 :(得分:0)
...
在触发器主体中,您可以引用主题表中的列 (与触发器关联的表)使用别名OLD和 新。 OLD.col_name引用现有行的列 更新或删除。 NEW.col_name引用新行的列 插入或更新后的现有行。
...
同样改变:
-- SET MESSAGE_TEXT = `Error: The age is out of range (0 > 150)`;
SET MESSAGE_TEXT = 'Error: The age is out of range (0 > 150)';
尝试:
DELIMITER //
DROP PROCEDURE IF EXISTS `sp_test`//
DROP TABLE IF EXISTS `People`//
CREATE TABLE `People` (
`age` INT
)//
INSERT INTO `People`
(`age`)
VALUES
(20)//
CREATE TRIGGER `max_age_trigger` BEFORE UPDATE ON `People`
FOR EACH ROW
BEGIN
-- IF People.age <0 OR People.age>150 THEN
IF NEW.`age` < 0 OR NEW.`age` > 150 THEN
SIGNAL SQLSTATE '45000'
-- SET MESSAGE_TEXT = `Error: The age is out of range (0 > 150)`;
SET MESSAGE_TEXT = 'Error: The age is out of range (0 > 150)';
END IF;
END//
CREATE PROCEDURE `sp_test`(`p_age` INT)
BEGIN
UPDATE `People` SET `age` = `p_age`;
END//
DELIMITER ;
测试:
mysql> CALL `sp_test`(200);
ERROR 1644 (45000): Error: The age is out of range (0 > 150)
建议,对于AGE,也许INT数据类型非常大,尝试更好的维度。请参阅Chapter 11 Data Types。