我在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
适用于月度数据date
和pim
个数字。我想写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