我正在使用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 ;
答案 0 :(得分:0)
您应该使用OLD或NEW子句而不是表名。例如'IF peakstat.summitdate> 0那么'必须是这样的 - '如果NEW.summitdate> 0那么'等等......
无法在AFTER UPDATE触发器中更新触发表的记录,将其更改为BEFORE UPDATE。
最后我们有这样的事情:
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 ;