【发布时间】:2016-03-20 08:17:56
【问题描述】:
我有一个工作正常的触发器。
CREATE TRIGGER crm_listings__au
AFTER UPDATE
ON crm_listings FOR EACH ROW
INSERT INTO crm_listings_versions
SELECT
'update', NULL, NOW(), NULL, d.*
FROM
crm_listings AS d
WHERE
d.id = NEW.id;
现在我还想跟踪字段列名。我想我不能在上面的查询中做,所以我改为下面的触发器
CREATE TRIGGER crm_listings__au
BEFORE UPDATE
ON crm_listings
FOR EACH ROW
BEGIN
IF OLD.type != NEW.type
THEN
INSERT INTO crm_listings_versions
SELECT
'update', NULL, NOW(), 'type', d.*
FROM
crm_listings AS d
WHERE
d.id = NEW.id;
END IF;
IF OLD.price != NEW.price
THEN
INSERT INTO crm_listings_versions
SELECT
'update', NULL, NOW(), 'price', d.*
FROM
crm_listings AS d
WHERE
d.id = NEW.id;
END IF;
END;
$$
当我运行这段代码时,我得到了这个错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 10 行的 '' 附近使用正确的语法
更新:
我在stackoverflow关注了这篇文章
【问题讨论】:
-
唯一想到的是您将第 4 列从
null更改为'type'- 也许第 4 列不是varchar列? -
您忘记在
create trigger命令前添加DELIMITER $$。另外不要忘记在此命令后附加DELIMITER ;。 -
@kordirko:你能解释一下吗?
-
@radoh: 它的字符串,这里是代码我是怎么做的......在 dt_datetime 之后添加 action_field VARCHAR(8) NOT NULL DEFAULT 'id',
-
嗯,好吧,我想那不是问题所在。不过我想知道 - 看到它被定义为
NOT NULL,你以前的触发器怎么能工作,因为你插入了NULL...?
标签: mysql triggers insertafter