MySQL 触发器错误:ROW 语法错误,使用 VALUES 的正确方法
该触发器语法有误,应该将'ROW'改为'VALUES'。
正确的触发器语法如下:
CREATE TRIGGER `CommunicationContact_BEFORE_INSERT` BEFORE INSERT ON `CommunicationContact` FOR EACH ROW
BEGIN
  DECLARE `contactable` BIT(1);
  SELECT `contactable` INTO `contactable` FROM `CommunicationProfile` WHERE `username` = NEW.`contact`;
  IF `contactable` = 1 THEN
    UPDATE `CommunicationProfile` SET
      `contactrequests` = CASE WHEN NEW.`status` = 0 THEN `contactrequests` + 1 ELSE `contactrequests` END,
      `contactrequested` = CASE WHEN NEW.`status` = 1 THEN `contactrequested` + 1 ELSE `contactrequested` END
    WHERE `username` = NEW.`username`;
  ELSE
    SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'Insertion aborted';
  END IF;
END $$
在插入数据时,应该使用VALUES语句,如下所示:
INSERT INTO `CommunicationContact`(`username`,`contact`,`status`,`created`) VALUES
('Jim','Kate',1,@time),('Kate','Jim',0,@time),
('Jim','Tom',1,@time),('Tom','Jim',0,@time);
原文地址: https://www.cveoy.top/t/topic/mZ8G 著作权归作者所有。请勿转载和采集!