MySQL触发器将列设置为max + 1不起作用

时间:2011-03-09 03:05:09

标签: mysql triggers

我在编写触发器时遇到困难,该触发器将排名列设置为最大排名值加1对于一组用户ID。也许代码比我的描述更有帮助:

CREATE TABLE `saved_listing` (
  `saved_listing_id` int(10) NOT NULL auto_increment,
  `user_id` int(10) NOT NULL default '0',
  `listing_id` int(10) NOT NULL default '0',
  `listing_ty` varchar(10) NOT NULL default '',
  `notes` text NULL,
  `rank` int(10) NOT NULL default '0',
  `modify_by` int(10) NOT NULL default '1',
  `modify_dt` timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `create_by` int(10) NOT NULL default '1',
  `create_dt` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` enum('Yes','No') NOT NULL default 'No',
  PRIMARY KEY  (`saved_listing_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;

这是我的触发器代码:

CREATE TRIGGER ins_saved_listing BEFORE INSERT ON saved_listing
FOR EACH ROW BEGIN
    SET NEW.create_dt = NOW();
    SET NEW.rank = (SELECT MAX(rank) + 1 FROM saved_listing WHERE user_id = NEW.user_id);
END

以下是我收到的错误消息:

  

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

附近使用正确的语法

非常感谢任何帮助。我没有太多编写触发器的经验。

MySQL服务器版本:5.1.49-3~bpo50 + 1

1 个答案:

答案 0 :(得分:10)

这是因为mysql看到了;(分隔符)并且中断了CREATE TRIGGER的执行

尝试更改为:

delimiter |


CREATE TRIGGER ins_saved_listing BEFORE INSERT ON saved_listing
FOR EACH ROW BEGIN
    SET NEW.create_dt = NOW();
    SET NEW.rank = (SELECT MAX(rank) + 1 FROM saved_listing WHERE user_id = NEW.user_id);
END;

|

delimiter ;