触发器创建不起作用
Posted
技术标签:
【中文标题】触发器创建不起作用【英文标题】:Trigger creation is not working 【发布时间】:2013-04-02 09:52:00 【问题描述】:我在 phpmyadmin 上创建触发器时遇到问题。 我有一个像下面这样的简单代码,当我提交代码时,在变量 x 声明的行中返回了一个 sintax 错误。我知道 SELECT 查询有效,因为我已经对其进行了测试,并返回了一个字符串。谁能帮我?提前致谢。
DELIMITER $$
CREATE TRIGGER `after_assigntags_insert` AFTER INSERT ON `assigntags`
FOR EACH ROW
BEGIN
DECLARE x VARCHAR(10);
SET x = (SELECT UltLabel FROM assignlabels WHERE ALmessage=1);
INSERT INTO messages (Message) VALUES (x);
$$
END
DELIMITER ;
【问题讨论】:
【参考方案1】:这是一个语法错误,
END
应该出现在您的分隔符 $$
之前。
试试这样的:
DELIMITER $$
CREATE TRIGGER `after_assigntags_insert` AFTER INSERT ON `assigntags`
FOR EACH ROW
BEGIN
DECLARE x VARCHAR(10);
SET x = (SELECT UltLabel FROM assignlabels WHERE ALmessage=1);
INSERT INTO messages (Message) VALUES (x);
END
$$
DELIMITER ;
【讨论】:
【参考方案2】:我认为BEGIN
在DECLARE
之后
DELIMITER $$
CREATE TRIGGER `after_assigntags_insert` AFTER INSERT ON `assigntags`
FOR EACH ROW
DECLARE
x VARCHAR(10);
BEGIN
SET x = (SELECT UltLabel FROM assignlabels WHERE ALmessage=1);
INSERT INTO messages (Message) VALUES (x);
$$
END
DELIMITER ;
【讨论】:
【参考方案3】:用user variables
怎么样?
DELIMITER $$
CREATE TRIGGER `after_assigntags_insert` AFTER INSERT ON `assigntags`
FOR EACH ROW
BEGIN
SET @x = (SELECT UltLabel FROM assignlabels WHERE ALmessage=1 LIMIT 1);
INSERT INTO messages (Message) VALUES (@x);
$$
END
DELIMITER ;
【讨论】:
以上是关于触发器创建不起作用的主要内容,如果未能解决你的问题,请参考以下文章