企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
  在使用MySQL的触发器的过程中遇到一个比较蛋疼的问题。 报错信息如下: ![](https://box.kancloud.cn/5879969c18c203d96e83ad0a70b51254_1089x364.jpg)   于是查看下数据库中的triggers触发器的定义语句: ~~~ mysql> SHOW TRIGGERS\G *************************** 1. row *************************** Trigger: items_comment_insert Event: INSERT Table: hz_items_comment Statement: BEGIN UPDATE hz_items SET comment_count = comment_count + 1 WHERE id = new.item_id; END Timing: BEFORE Created: NULL sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION Definer: root@localhost character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: latin1_swedish_ci *************************** 2. row *************************** Trigger: items_comment_delete Event: DELETE Table: hz_items_comment Statement: BEGIN UPDATE hz_items SET comment_count = comment_count - 1 WHERE id = old.item_id; END Timing: AFTER Created: NULL sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION Definer: root@localhost character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: latin1_swedish_ci 2 rows in set (0.00 sec) ~~~   在上面的定义语句中我们看到了`Definer`触发器的定义者,那是因为在svn测试服务器的连接用户为luo_account用户。 **解决方案**   使用shell登录Linux终端,删除之前定义的触发器语句,并执行新的语句。   查看当前连接的用户: ~~~ mysql> \s -------------- mysql Ver 14.14 Distrib 5.6.28, for Linux (x86_64) using EditLine wrapper Connection id: 1339 Current database: www_welltrend Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; ~~~   具体执行语句: ~~~ DROP TRIGGER items_comment_insert; DROP TRIGGER items_comment_delete; DELIMITER $ CREATE TRIGGER items_comment_insert BEFORE INSERT ON hz_items_comment FOR EACH ROW BEGIN UPDATE hz_items SET comment_count = comment_count + 1 WHERE id = new.item_id; END; $ DELIMITER ; DELIMITER $ CREATE TRIGGER items_comment_delete AFTER DELETE ON hz_items_comment FOR EACH ROW BEGIN UPDATE hz_items SET comment_count = comment_count - 1 WHERE id = old.item_id; END; $ DELIMITER ; ~~~