MySQL变量使用总结

变量: 临时存储数据

变量分为两种:

  • 系统变量
  • 自定义变量

一、系统变量

系统内部已经定义好的变量: 用户只需要直接访问(使用)

系统提供了很多变量: 服务器对任何内容的处理(表现的任何特性)都是由变量所保存的值来确定

是否自动提交: autocommit
自增长步长: auto_increment_increment
...

查看所有变量: show variables;

在mysql中: 系统变量又分为了两类: session变量(会话级别),global变量(全局级别)
show session variables;
show global variables;

session变量: 用户在客户端连上服务端之后才有的变量: 客户端断开,变量消失
global变量: 只要服务器运行就会产生的变量(跟客户端没有关系).

查看系统变量: select @@变量名;

修改系统变量: 会话级别和全局级别

会话级别修改
set 变量名 = 值; -- 会话级别
set session 变量名 = 值;

全局级别修改
set global 变量名 = 值;
set @@global.变量名 = 值;

全局级别的修改不会对已经连上服务器的客户端产生作用: 客户端必须重连

二、自定义变量

用户定义的变量

定义规则: 在变量名字之前使用一个@符号
set @自定义变量名 = 值;

访问变量: select @变量名;

因为在mysql中”=”通常是认为是比较运算符,而不是赋值运算符(事实可以): 为了解决这一的矛盾: mysql开发团队定义了新的赋值符号: :=(冒号 + 等号)

在mysql中,可以访问任意一个不存在的变量: 这种变量的值都是null

三、数据表获取变量

有两种方式能够从数据表中获取数据

语法1: select @变量名 := 字段名... From 表名 where条件; -- 从表中取出对应的字段的值,赋值给变量

以上方案特别注意: 只能使用专门的赋值符号:= 不能使用=(变成比较)

语法2: 专门从数据表中取出数据赋值给变量(不会显示数据)

特别注意: 该方式是纯粹赋值,所以必须保证select查到的记录数是1条

四、变量作用域

Mysql中变量本质分为两种: 全局变量和局部变量
对应的作用范围也分为两种: 全局作用域和局部作用域

全局作用域: 结构之外(函数,触发器,存储过程)
局部作用域: 结构之内

全局变量: 使用set 关键字 + @变量名定义的变量都是全局变量,在任何地方都可以使用
局部变量: 在结构内部定义的变量: 同时要求使用的是declare进行声明,而不是使用set @变量名),只能在定义的结构内部使用

需求: 电子商务系统,有两张表: 商品表(id,名字,价格,货号,库存等), 订单表(id,订单号,商品id,时间,购买数量等)
当用户下单成功, 订单生成(商品id,商品的数量): 商品库存必须减少.

posted @ 2016-03-05 15:08  chenjiacheng  阅读(248)  评论(0编辑  收藏  举报