创建触发器时带分隔符的奇怪错误

时间:2011-06-10 08:39:17

标签: mysql triggers delimiter

确定有些奇怪的事情发生了,我无法理解。我正在创建一些触发器,但在尝试在实时DB上创建它们时会出现奇怪的错误。示例查询是这样的:

delimiter |

CREATE TRIGGER debug_upd_before BEFORE UPDATE ON properties_availability
FOR EACH ROW BEGIN
    INSERT INTO debug_upd_before SET timestamp = NOW(), avID = OLD.avID, avPropertyID = OLD.avPropertyID, 
    avAvailableFrom = OLD.avAvailableFrom, avAvailableTo = OLD.avAvailableTo, avPrice = OLD.avPrice, 
    avIsAvailable = OLD.avIsAvailable;
END|

...

执行精细的localy。我正在使用phpmyadmin,因为我没有任何其他访问在线数据库。我知道我没有完整的权限,并认为它可能与此有关,但我得到的错误是:

  

您的SQL语法有错误;   检查对应的手册   您的MySQL服务器版本   正确的语法在'delimiter |

附近使用

不是“你没有权限这样做”或类似的东西。当我尝试执行更简单的操作时会发生同样的情况:

delimiter |
select 1|
select 2

我得到的错误是相同的,我不能设置分隔符,默认不适合我,因为我必须在触发器内的查询后使用。我尝试了其他符号作为分隔符,但结果是一样的。关于问题是什么以及如何避免它的任何想法?一些触发器执行多个查询,如果这会产生影响......

谢谢!

2 个答案:

答案 0 :(得分:1)

试试这句话(没有分隔符) -

CREATE TRIGGER debug_upd_before BEFORE UPDATE ON properties_availability
FOR EACH ROW
INSERT INTO debug_upd_before SET
  timestamp = now(),
  avID = OLD.avID,
  avPropertyID = OLD.avPropertyID,
  avAvailableFrom = OLD.avAvailableFrom,
  avAvailableTo = OLD.avAvailableTo,
  avPrice = OLD.avPrice,
  avIsAvailable = OLD.avIsAvailable;

答案 1 :(得分:0)

问题是|是按位还是。
所以你使用保留符号作为分隔符。

改为使用$$