事情是这样的,一开始是在 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 1
不要用触发器。不要用存储过程。
|
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 触发器就是存储过程的一种,不用担心写在哪。
|