我正在尝试创建一个触发器,该触发器将根据用户输入的lat / lng列来更新GEOMETRY列。我的触发器看起来像这样-
CREATE TRIGGER `tbl.foo` AFTER INSERT ON `tbl` FOR EACH ROW BEGIN UPDATE tbl SET coord = Point(lng, lat) WHERE id = NEW.id; END
但是,当我插入带有lng,lat值的新行时,出现以下错误-
错误1442(HY000):无法更新存储函数/触发器中的表’tbl’,因为调用该存储函数/触发器的语句已使用该表。
我不能创建这样的触发器吗?如果没有,那么自动化的方法是什么?
尝试使用INSERT触发器之前,并修改所需的值,例如-
CREATE TRIGGER trigger1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN SET NEW.column1 = 'another value'; END
编辑
CREATE TABLE table_test_trigger ( id INT(11) NOT NULL AUTO_INCREMENT, a INT(11) DEFAULT NULL, b INT(11) DEFAULT NULL, c INT(11) DEFAULT NULL, PRIMARY KEY (id) ); DELIMITER $$ CREATE TRIGGER trigger1 BEFORE INSERT ON table_test_trigger FOR EACH ROW BEGIN SET NEW.c = NEW.a + NEW.b; END $$ DELIMITER ; INSERT INTO table_test_trigger(a, b) VALUES (10, 5); SELECT * FROM table_test_trigger; +----+------+------+------+ | id | a | b | c | +----+------+------+------+ | 1 | 10 | 5 | 15 | +----+------+------+------+