插入前SQL触发器的问题

时间:2014-04-29 13:59:59

标签: mysql triggers

我想创建一个触发器,以便控制负值。

起初我试过......

CREATE TRIGGER POS_PROD
BEFORE INSERT
ON PRODUCTS
FOR EACH ROW
BEGIN
IF stock <0 OR price <0
THEN
RESIGNAL SET MESSAGE_TEXT = 'Please insert a positive value';
END IF;
END

问题是,一旦我尝试插入值,我就会收到错误告诉我&#34; Price是一个未知字段&#34;。然后我决定试试这个......

CREATE TRIGGER POS_PROD
AFTER INSERT
ON PRODUCTS
FOR EACH ROW
BEGIN
IF stock <0 OR price <0
THEN
RESIGNAL SET MESSAGE_TEXT = 'Please insert a positive value';
ROLLBACK;
END IF;
END

但是我收到了这个错误...在存储的函数或触发器中不允许显式或隐式提交。&#34;

非常感谢你。

1 个答案:

答案 0 :(得分:0)

试试这个

CREATE TRIGGER POS_PROD
BEFORE INSERT
ON PRODUCTS
FOR EACH ROW
BEGIN
IF NEW.stock <0 OR NEW.price <0
THEN
SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'Please insert a positive value';
END IF;
END;


INSERT INTO PRODUCTS values (10,20);
INSERT INTO PRODUCTS values (10,-20);

你必须使用NEW来引用来自INSERT语句的值。

SQL FIDDLE