Skip to content

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触发器

Clone this wiki locally