第8章 sys系统库配置表 - xiaoboluo768/qianjinliangfang GitHub Wiki

8.1 sys_config表

mysql> select * from sys_config;
......
6 rows in set (0.00 sec)

# statement_truncate_len配置选项值默认是64,直接调用format_statement()函数返回64字节长度,在未调用任何涉及该配置选项的函数之前,该自定义变量值为NULL,此时函数需要从表中查询默认值
mysql> select @sys.statement_truncate_len;
......
1 row in set (0.00 sec)

mysql> SET @stmt = 'SELECT variable, value, set_time, set_by FROM sys_config';
Query OK, 0 rows affected (0.00 sec)

admin@localhost : sys 11:52:04> SELECT format_statement(@stmt);
......
1 row in set (0.01 sec)

# 调用过一次format_statement()函数之后,表中的默认值会被更新到该自定义配置选项变量中
mysql> select @sys.statement_truncate_len;
......
1 row in set (0.00 sec)

# 在会话级别中修改为32
mysql> set @sys.statement_truncate_len = 32;
Query OK, 0 rows affected (0.00 sec)

mysql> select @sys.statement_truncate_len;
......
1 row in set (0.00 sec)

# 再次调用format_statement()函数,可以发现返回结果中的长度缩短了,说明使用了在会话级别中修改的值32
mysql> SELECT format_statement(@stmt);
......
1 row in set (0.00 sec)

mysql> SET @sys.statement_truncate_len = NULL;
mysql> SELECT format_statement(@stmt);
+----------------------------------------------------------+
......

# 如果所有会话都需要使用,则可以将debug选项添加到sys_config表中
mysql> INSERT INTO sys_config (variable, value) VALUES('debug', 'ON');

# 要更改表中的调试配置选项值,可以使用update语句
## 首先,修改表中的值
mysql> UPDATE sys_config SET value = 'OFF' WHERE variable = 'debug';

## 然后,为了确保当前会话中的存储过程调用时使用表中更改后的值,需要将相应的用户定义的变量设置为NULL
mysql> SET @sys.debug = NULL;

mysql> grant TRIGGER on sys.* to 'mysql.sys'@'localhost' identified by 'letsg0';
......
mysql> grant select,insert,update on sys.sys_config to 'mysql.sys'@'localhost' identified by 'letsg0';

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

8.3 sys_config_update_set_user触发器

DROP TRIGGER IF EXISTS sys_config_update_set_user;

DELIMITER $$

CREATE DEFINER='mysql.sys'@'localhost' TRIGGER sys_config_update_set_user BEFORE UPDATE 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 ;

上一篇:第7章 sys系统库初相识 | 下一篇:第9章 sys系统库应用示例荟萃