
事情是这样的,一开始是在 mysql5.6 的版本上,使用触发器+存储过程的组合,是正常的; 后来公司一次升级把 mysql 换成了 5.7 版本,然后就失效了,求助是 mysql5.7 在这方面有什么限制吗 之前在另一个 5.7 环境执行 sql 时,提醒过 binlog 的问题,不知道和这个时候有关系,是否需要额外的参数设置 希望各位大佬指点一下
附上脚本 触发器脚本: CREATE TRIGGER tg_tab_name_insert AFTER INSERT ON table FOR EACH ROW BEGIN CALL p_sync_data('tab_user_order','id',NEW.id,1); END;
存储过脚本: CREATE PROCEDURE p_sync_data( IN var_tb_name varchar(50), IN var_tb_key varchar(50), IN var_tb_key_value varchar(50), IN var_op int(1) ) BEGIN DECLARE var_enable INT(1); SELECT enable INTO var_enable FROM tb_ctrl WHERE tb_name=var_tb_name; IF var_enable IS NOT NULL AND var_enable = 1 THEN INSERT INTO tb_data_sync(id,sync_tb_name,sync_tb_key,tb_key_value,sync_op,created) VALUES (UUID(),var_tb_name,var_tb_key,var_tb_key_value,var_op,f_current_timestamp()); END IF; END;
时间戳的函数脚本: CREATE FUNCTION f_current_timestamp() RETURNS bigint(20) BEGIN DECLARE r_timstamp BIGINT(20); SELECT REPLACE(unix_timestamp(current_timestamp(3)),'.','') INTO r_timstamp; RETURN r_timstamp; END;
1 phpfpm 2021-04-19 10:31:00 +08:00 不要用触发器。不要用存储过程。 |
2 mingl0280 2021-04-19 10:45:49 +08:00 via Android 是不是禁止在 trigger 里使用存储过程了? 你不用在 trigger 里叠存储过程的,因为 trigger 本身就是存储过程了。 |
3 lazycat353 OP @mingl0280 我之前也考虑过这个问题,不过上面也提到了,原来在 5.6 的 mysql,这种组合是可以正常使用的,所以我也很疑惑 |
4 lazycat353 OP @phpfpm 原来的代码就是这样的,也不好动它 |
5 mingl0280 2021-04-19 11:03:24 +08:00 @lazycat353 不要理他,他啥都不会只会喊你不要用 xxx 。 |
6 mingl0280 2021-04-19 11:03:52 +08:00 @lazycat353 总之就是先去掉存储过程试一下(你这个代码太乱了我懒得格式化了看哈哈哈) |
7 lazycat353 OP @mingl0280 去掉存储过程确实是可以用了 不过就是以前封装的存储过程里的 sql 现在都写在触发器上了 |
8 mingl0280 2021-04-20 11:45:52 +08:00 @lazycat353 触发器就是存储过程的一种,不用担心写在哪。 |