上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 ;