千金良方:MySQL性能优化金字塔法则
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

8.2 sys_config_insert_set_user触发器

当对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字段操作。

sys_config_insert_set_user触发器定义语句如下:

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 ;