MYSQL触发器获取最后一行值和设置

时间:2016-06-20 20:07:02

标签: mysql

我遇到了这个问题。这是我做过的第一个触发器(对此非常新)。我认为这是格式化问题。我有一张名为filleradown的桌子。我需要每次插入一条记录来检查新行中B3_4_5的值是否为1.如果是,我需要它然后运行一个select来查找B3_4_5为0的最后一个条目。然后更新NEW .stoptime值为最后0条记录的“时间”值。

我认为我有所有部件,但似乎无法让它运行。请帮忙。

DELIMITER $$
 CREATE TRIGGER downinsert 
 BEFORE INSERT ON  'filleradown' FOR EACH ROW BEGIN
DECLARE downtime DATETIME;
IF (NEW.B3_4_5 = '1') THEN
    SELECT time INTO downtime FROM filleradown WHERE B3_4_5 = 0 ORDER BY time DESC LIMIT 1;
    SET NEW.stoptime = downtime;
END IF
$$
DELIMITER ;

更新:我在这里得到了更好的代码,但仍然遇到了一些错误。

DELIMITER $$
CREATE TRIGGER downinsert BEFORE INSERT ON filleradown
FOR EACH ROW 
BEGIN
DECLARE dt DATETIME;
IF NEW.B3_4_5 = '1' THEN
SELECT MAX(time) INTO dt FROM filleradown WHERE filleradown.B3_4_5 = 0;
SET NEW.stoptime = dt;
END IF
$$
DELIMITER ;

我收到错误

1064 - 您的SQL语法出错;检查与MariaDB服务器版本对应的手册,以便在''第8行

附近使用正确的语法

1 个答案:

答案 0 :(得分:0)

修好了。字面上错过了END语句。 捂脸

DELIMITER $$
CREATE TRIGGER downinsert BEFORE INSERT ON filleradown
FOR EACH ROW 
BEGIN
DECLARE dt DATETIME;
IF NEW.B3_4_5 = '1' THEN
    SELECT MAX(time) INTO dt FROM filleradown WHERE filleradown.B3_4_5 = 0;
    SET NEW.stoptime = dt;
END IF;
END $$
DELIMITER ;