MySQL-10-环境变量-配置文件-触发器
系统变量
是 MySQL 服务器有的变量,用于支持服务的运转。
变量级别
全局系统变量:MySQL 应用级别,所有的会话均可访问。
会话系统变量:单次的会话级别,不同会话之间隔离。
在 MySQL 中有些系统变量只能是全局的,例如 max_connections 用于限制服务器的最大连接数;有些系统变量作用域既可以是全局又可以是会话,例如 character_set_client 用于设置客户端的字符集(可以作为全局变量设置为默认值,也可以变成会话变量只设置当前会话的字符集);有些系统变量的作用域只能是当前会话,例如 pseudo_thread_id 用于标记当前会话的 MySQL 连接 ID。
查看变量
1 | #查看满足条件的部分系统变量。 |
作为 MySQL 编码规范,MySQL 中的系统变量以两个“@”
开头,其中“@@global”仅用于标记全局系统变量,“@@session”仅用于标记会话系统变量。“@@”首先标记会话系统变量,如果会话系统变量不存在,则标记全局系统变量。
1 | #查看指定的系统变量的值 |
修改变量
有些时候,数据库管理员需要修改系统变量的默认值,以便修改当前会话或者 MySQL 服务实例的属性、特征。具体方法:
方式1:修改 MySQL 配置文件
,继而修改 MySQL 系统变量的值(该方法需要重启 MySQL 服务)
方式2:在 MySQL 服务运行期间,使用“set”命令重新设置系统变量的值
1 | #为某个系统变量赋值 |
用户变量
用户变量是用户自己定义的,作为 MySQL 编码规范,MySQL 中的用户变量以 一个“@”
开头。根据作用范围不同,又分为 会话用户变量
和 局部变量
。
会话用户变量:作用域和会话变量一样,只对
当前连接
会话有效。局部变量:只在 BEGIN 和 END 语句块中有效。局部变量只能在
存储过程和函数
中使用。
定义变量
会话变量:
1 | SET @用户变量 = 值; |
局部变量:
1 | DECLARE 变量名1 变量数据类型 [DEFAULT 变量默认值]; |
对比
1 | 作用域 定义位置 语法 |
配置文件
win 下面的配置文件是 ini,而 Linux/MacOS 是 cnf。启动 MySQL 的时候,会读取对应的配置信息。
基本格式
与在命令行中指定启动选项不同的是,配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号 [] 扩起来,像这样:
1 | [server] |
像这个配置文件里就定义了许多个组,组名分别是server 、mysqld、mysqld_safe、 client、mysql、mysqladmin。每个组下边可以定义若干个启动选项,使用 key=value
的形式。
- 如果两个一模一样的配置冲突,则按照最后的那个生效。
选项组
配置文件中不同的选项组是给不同的启动命令使用的。不过有两个选项组比较特别:
- [server] 组下边的启动选项将作用于所有的服务器程序。
- [client] 组下边的启动选项将作用于所有的客户端程序。
下面是启动命令能读取的选项组都有哪些:
启动命令 | 类别 | 能读取的组 |
---|---|---|
mysqld | 启动服务器 | [mysqld]、[server] |
mysqld_safe | 启动服务器 | [mysqld]、 [server] 、[mysqld_safe] |
mysql.server | 启动服务器 | [mysqld]、[server]、[mysql.server] |
mysql | 启动客户端 | [mysql]、[client] |
mysqladmin | 启动客户端 | [mysqladmin]、[client] |
mysqldump | 启动客户端 | [mysqldump] 、[client] |
触发器
触发器是由 事件来触发
某个操作,这些事件包括 INSERT
、UPDATE
、DELETE
事件。所谓事件就是指用户的动作或者触发某项行为。如果定义了触发程序,当数据库执行这些语句时候,就相当于事件发生了,就会 自动
激发触发器执行相应的操作。
创建
1 | CREATE TRIGGER 触发器名称 |
表名
:表示触发器监控的对象。BEFORE|AFTER
:表示触发的时间。BEFORE 表示在事件之前触发;AFTER 表示在事件之后触发。INSERT|UPDATE|DELETE
:表示触发的事件。- INSERT 表示插入记录时触发;
- UPDATE 表示更新记录时触发;
- DELETE 表示删除记录时触发。
触发器执行的语句块
:可以是单条SQL语句,也可以是由BEGIN…END结构组成的复合语句块。
比如,用触发器更新日志:
1 | DELIMITER // |
查看
查看触发器是查看数据库中已经存在的触发器的定义、状态和语法信息等。
方式1:查看当前数据库的所有触发器的定义
1 | SHOW TRIGGERS\G |
方式2:查看当前数据库中某个触发器的定义
1 | SHOW CREATE TRIGGER 触发器名 |
方式3:从系统库 information_schema 的 TRIGGERS 表中查询 “salary_check_trigger” 触发器的信息。
1 | SELECT * FROM information_schema.TRIGGERS; |
删除
触发器也是数据库对象,删除触发器也用 DROP 语句,语法格式如下:
1 | DROP TRIGGER IF EXISTS 触发器名称; |