定义MYSQL触发器的语法错误

时间:2011-11-09 06:09:05

标签: mysql sql triggers

我正在使用MYSQL Server版本:5.5.16并且很难建立我的第一个触发器。每当表更新时,都希望根据表中的其他值更新变量。以下代码产生语法错误...#1193 - 未知系统变量'status'

CREATE TABLE `peakstat` (
  `peakuid` int(11) NOT NULL AUTO_INCREMENT,
  `status` varchar(20)  ,
  `scheddate` date  ,
  `summitdate` date ,
PRIMARY KEY (`peakuid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

并建立触发器......

 delimiter $$
 drop TRIGGER if exists addstatus $$
 CREATE TRIGGER  addstatus 
 AFTER UPDATE ON  peakstat
   FOR EACH ROW
    BEGIN
         IF peakstat.summitdate > 0 THEN
              set peakstat.status = "CLIMBED";
         ELSEIF peakstat.scheddate > NOW() THEN
              set peakstat.status = "SCHEDULED";
         END IF;
    END;$$
 DELIMITER ;

1 个答案:

答案 0 :(得分:0)

  1. 您应该使用OLD或NEW子句而不是表名。例如'IF peakstat.summitdate> 0那么'必须是这样的 - '如果NEW.summitdate> 0那么'等等......

  2. 无法在AFTER UPDATE触发器中更新触发表的记录,将其更改为BEFORE UPDATE。

  3. 最后我们有这样的事情:

    DELIMITER $$
    
    DROP TRIGGER IF EXISTS addstatus$$
    
    CREATE TRIGGER addstatus
    BEFORE UPDATE ON peakstat
    FOR EACH ROW
    BEGIN
      IF NEW.summitdate > 0 THEN
        SET NEW.status = 'CLIMBED';
      ELSEIF NEW.scheddate > NOW() THEN
        SET NEW.status = 'SCHEDULED';
      END IF;
    END$$
    
    DELIMITER ;