MYSQL BEFORE INSERT触发器不会将记录插入表

时间:2017-07-27 13:07:53

标签: mysql database algorithm database-design triggers

我在ubuntu 16.04(本地mashine)上使用MYSQL 5.7.19。我有2个表架构:

CREATE TABLE raw (rdate DATE, pim int(3));
CREATE TABLE indx (idate DATE, ipim int(2));
INSERT INTO raw (rdate, pim)
VALUES (20000101,50), (20000201, 52);
INSERT INTO indx (idate, ipim)
VALUES (20000101,5), (20000201, 5);

raw适用于月度数据datepim个数字。我想写trigger - before insert,它会将新的pim与最新的{{pim比较之前的pim值更高或更低“,然后根据数字范围(对于示例:如果pim介于40到50之间而不是ipim = 5),请将特定数字插入表ipim中的indx列,将新rdate插入新{ {1}}。 这是我的触发器代码:

idate

接受触发器代码没有错误,但当我尝试通过在DELIMITER // CREATE TRIGGER sortpim BEFORE INSERT ON raw FOR EACH ROW BEGIN DECLARE new_pim,old_pim,max_d INT; SET new_pim = NEW.pim; SET old_pim = (SELECT pim FROM raw WHERE rdate > CURDATE()); IF (old_pim <= new_pim) THEN CASE WHEN new_pim BETWEEN 50 AND 59 THEN INSERT INTO indx(idate,ipim) VALUES(NEW.rdate,6); WHEN new_pim BETWEEN 60 AND 70 THEN INSERT INTO indx(idate,ipim) VALUES(NEW.rdate,7); END CASE; ELSEIF (old_pim > new_pim) THEN CASE WHEN new_pim BETWEEN 50 AND 60 THEN INSERT INTO indx(idate,ipim) VALUES(NEW.rdate,5); WHEN new_pim BETWEEN 40 AND 49 THEN INSERT INTO indx(idate,ipim) VALUES(NEW.rdate,4); END CASE; END IF; END; // DELIMITER ; 表中插入新记录来触发它时:

raw

记录插入时没有错误,触发器不执行任何操作 - INSERT INTO raw(rdate,pim) VALUES(20000301,55);表未插入新记录。

我是MYSQL的新手,因此很可能选择了错误的逻辑或方法。它可能是算法或语法上的错误。任何解决此问题的建议都表示赞赏。感谢名单。

UPDATE! Thanx的建议和指出我的错误在哪里。 我找到了获取最新日期的解决方案,因为第7行的触发器代码存在错误。这是有效的:

indx

0 个答案:

没有答案