mysql触发器多个变量同时赋值_MySQL的各种变量和触发器

2ff34e647e2e3cdfd8dca593e17d9b0a.png

局部变量

局部变量只在BEGIN和END的代码块中有效,执行完该代码块,变量就消失,在存储过程中最为常见。DECLARE语句专门用于定义局部变量,可以使用DEFAULT语句来指明默认值。定义多个变量:DECLARE x, y INT DEFAULT 0。赋值用的是SET或SELECT语句:1

2

3DECLARE total_count INT DEFAULT 0

SET total_count = 10;

SELECT COUNT(*) INTO total_count FROM products

存储过程中的常见应用:1

2

3

4

5

6

7DELIMITER //

CREATE PROCEDURE p1(IN a INT, IN b INT)

BEGIN

DECLARE c INT DEFAULT 0;

set c=a+b;

select c AS num;

END//

c就是局部变量

用户变量

用户变量与数据库连接有关,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将失效。用户变量不需要声明,可以直接使用,用户变量以@var_name的形式命名变量,[email protected]

赋值语法,一般用SET:1

2set @varName=value;

SELECT @var_name := value;

赋值后输出用select @varName。比如:

mysql触发器多个变量同时赋值_MySQL的各种变量和触发器_第1张图片

系统变量

MySQL可以访问许多系统变量。当服务器运行时许多变量允许动态更改。这样就可以修改服务器操作而不需要停止并重启服务器。系统变量又包含两种:会话变量影响具体客户端连接的操作,全局变量影响服务器整体操作。

全局变量

全局变量在 MySQL 启动的时候由服务器自动初始化他们的值, 这些默认的值可以在/etc/my.cnf中修改。要想更改全局变量,必须具有SUPER权限。全局变量作用于SERVER的整个生命周期,但重启后所有设置的全局变量均失效。要想让全局变量重启后继续生效,需要更改相应的配置文件。

查看全局变量1

2show global variables;// 变量太多,一般不用

show global variables like `wait_timeout`;

mysql触发器多个变量同时赋值_MySQL的各种变量和触发器_第2张图片

修改全局变量1

2set global varname = value;

set @@global.varname = value;

会话变量

会话变量在每一个数据库连接建立后,由MySQL来初始化。MySQL会将当前所有的全局变量都复制一份作为会话变量。也就是说,如果在建立会话以后,没有人为更改过会话变量与全局变量的值,那这两份变量的值应该是完全一致的。设置会话变量不需要特殊权限,会话变量的作用域与用户变量一样,仅限于当前连接。

查看会话变量1

2show session variables; // 变量太多,一般不用

show variables like 'version';

修改会话变量1

2set session varname = value;

set @@session.varname = value;

SESSION关键字,都可以用LOCAL关键字来代替。

触发器

按照《MySQL必知必会》的例子创建触发器,结果报错

aa557f849666084624a7aa0b1df99a35.png

因为在触发器中允许调用存储过程、执行INSERT,UPDATE,DELETE等操作,但却唯独不允许返回任何结果,仔细一查,原来是版本变更导致的问题。创建成功的代码([email protected]):

b4aa9f1ae9d2654353e5c00ed5e05652.png

或者是这样的形式:1CREATE TRIGGER my AFTER INSERT ON products FOR EACH ROW select 'abc' INTO @a;

插入前后,@a的变化,说明触发器执行了:

mysql触发器多个变量同时赋值_MySQL的各种变量和触发器_第3张图片

查看指定数据库下的触发器,若不指定数据库名,则默认查找当前数据库下的所有触发器(SQL语句的定义方法中[]用来表示可选项,{}表示必填项,|表示或者):1SHOW TRIGGERS [{FROM | IN} db_name];

查看创建触发器的SQL语句1SHOW CREATE TRIGGER trigger_name;

你可能感兴趣的:(mysql触发器多个变量同时赋值_MySQL的各种变量和触发器)