-
Notifications
You must be signed in to change notification settings - Fork 111
sys_config_insert_set_user触发器
xiaoboluo768 edited this page Jun 9, 2020
·
2 revisions
-
当对sys_config表执行INSERT语句添加配置选项行时,sys_config_insert_set_user触发器会将sys_config表的set_by列设置为当前用户名
- 注意事项:要使得该触发器生效,有如下三个条件:
- mysql.sys用户必须存在,因为 定义语句中DEFINER='mysql.sys'@'localhost' 表示只有该用户才能够调用该触发器,当然,为了方便,你可以删掉这个触发器,然后使用INVOKER='mysql.sys'@'localhost'子句创建
- mysql.sys用户初始化默认对表sys.sys_config表只有select权限,无法调用sys_config_insert_set_user和sys_config_update_set_user触发器完成更新set_by字段为当前操作用户名,会报错ERROR 1143 (42000): UPDATE command denied to user 'mysql.sys'@'localhost' for column 'set_by' in table 'sys_config',所以要实现这个功能,针对sys.sys_config表还需要添加insert和update权限给mysql.sys用户
- @sys.ignore_sys_config_triggers自定义变量必须为0值,任何非0值将导致该触发器不执行更新set_by字段操作
- 注意事项:要使得该触发器生效,有如下三个条件:
-
触发器定义语句
DROP TRIGGER IF EXISTS sys_config_insert_set_user;
DELIMITER $$
CREATE DEFINER='mysql.sys'@'localhost' TRIGGER sys_config_insert_set_user BEFORE INSERT on sys_config
FOR EACH ROW
BEGIN
IF @sys.ignore_sys_config_triggers != true AND NEW.set_by IS NULL THEN
SET NEW.set_by = USER();
END IF;
END$$
DELIMITER ;
上一篇: sys_config表 | 下一篇: sys_config_update_set_user触发器
- 验证、测试、整理:罗小波
- QQ:309969177
- 提示:本系列文章的主体结构遵循Oracle MySQL 官方 5.7 手册中,关于information_schema、mysql schema、performance_schema、sys schema的章节结构体系,并额外添加了一些验证、测试数据。鉴于本人精力和能力有限,难免出现一些纰漏,欢迎大家踊跃指正!