Mysql触发器创建抛出错误,NEW.ref未定义

时间:2014-02-27 21:55:55

标签: mysql mysql-error-1064

我正在尝试使用OBJECTS表跟踪通用ID,该表包含要在其他表中使用的自动递增ID字段。当在其他表中命中唯一约束时,OBJECTS表仍然使用id。我试图通过在before_insert触发器上使用if exists函数来停止它:

DELIMITER $$
CREATE TRIGGER places_BINS BEFORE INSERT ON places FOR EACH ROW
BEGIN
IF (EXISTS(SELECT * FROM places WHERE ref = NEW.ref)) THEN
SET NEW.id = NULL;
ELSE
INSERT INTO objects (object_type) VALUES ('place');
SET NEW.id = LAST_INSERT_ID();
END IF;
END$$
DELIMITER ;

尝试创建触发器时出错:

ERROR 1054 (42S22): Unknown column 'ref' in 'NEW'

我对NEW的理解不正确吗?我认为NEW应该有任何可能与表交互的字段。

'ref'是表中具有唯一约束的字段。

1 个答案:

答案 0 :(得分:0)

原来是拼写错误。事实证明ref没有定义!谢谢你的帮助。

任何人遇到这个,触发器是我如何使用mysql模拟oracleDB中的“序列”。如果记录尚不存在,则触发器在插入时在共享自动递增表中创建记录。这适用于insert语句中的ON DUPLICATE函数,以避免为失败的插入尝试消耗ID。 AS places.id具有非空约束,记录将无法插入并且可以捕获错误。

全部谢谢!