我有以下触发器:
DELIMITER $$
DROP TRIGGER IF EXISTS trg_day_1_status_update$$
USE `tbl_user_status`$$
CREATE DEFINER = CURRENT_USER TRIGGER `tbl_user_status`.`trg_day_1_status_update` AFTER INSERT ON `tbl_tf_day_1` FOR EACH ROW
BEGIN
UPDATE tbl_user_status
SET NEW.roadmap_day = tbl_tf_day_1.roadmap_day,
SET NEW.user_status = "active",
SET NEW.latest_submit = tbl_tf_day_1.submitted_on,
SET NEW.latest_tf_id = tbl_tf_day_1.tf_id,
SET NEW.d0 = 1,
SET NEW.latest_cig_intake = tbl_tf_day_1.q_id_3_ftnd,
SET NEW.latest_cigintake_submit = tbl_tf_day_1.submitted_on
WHERE id_user = tbl_tf_day_1.id_user LIMIT 1;
END;
$$
DELIMITER ;
但我不断收到错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET NEW.user_status = "active",
SET NEW.latest_submit = tbl_tf_day_1.submitted' at line 5
我尝试了很多东西,包括删除字段之前的“NEW”,更改要插入的值,甚至在插入之前触发此触发器。不知道哪里出了问题,请帮忙!
最佳答案
这里有一些问题,set只需要声明一次,set语句的方向不正确,等号(=)左边的列应该是您希望在表中设置的列要更新的列,等号 (=) 右侧的列应为您要更新的列,前面应有 NEW。限定符(但不适用于诸如“active”之类的常量,等于(=)右侧的where子句列名应该以NEW开头。我对您尝试更新的表名也有点怀疑,这似乎是与创建语句中的数据库/架构共享一个名称。
关于mysql - 触发器编辑mysql中的其他表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48107057/