变量分为两种:系统变量和自定义变量
系统变量系统定义好的变量:大部分的时候用户根本不需要使用系统变量:系统变量是用来控制服务器的表现的:如autocommit,auto——increment——increment等
查看系统变量show variables; -- 查看所有系统变量
查看具体变量值:任何一个有数据返回的内容都是由select查看
select@@变量名;
-- 查看系统变量值
select @@version,@@autocommit,@@auto_increment_offset,@@character_set_results;
修改系统变量分为两种方式:会话级别和全局级别
会话级别:临时修改,当前客户端当次连接有效
set 变量名= 值;
-- 修改会话级别变量
set autocommit = 0;
select @@autocommit;
全局级别:一次修改,永久生效(对所有客户端都生效)
set glabal 变量名 = 值;
-- 修改全局级别变量
set global autocommit = 0;
select @@autocommit;
如果对方(其他)客户端当前已经连上服务器,那么当次修改无效,要退出重新登录才会生效
自定义变量 定义变量系统为了区分系统变量,规定用户自定义变量必须使用一个@符号
set @变量名 = 值;
-- 定义自定义变量
set @name = '张三';
自定义变量也是类似系统变量查看
select @变量名;
-- 查看变量;
select @name;
在mysql中,"="会默认的当作比较符号处理(很多地方),mysql为了区分比较和赋值的概念:重新定义了一个新的赋值符号: :=
-- 定义变量
set @age := 18;
select @age;
Mysql允许从数据表中获取数据,然后赋值给变量:两种方式
方案1:边赋值,边查看结果
select @变量名 := 字段名 from 数据源; -- 从字段中取值赋值给变量名,如果使用=会变成比较
-- 从表中获取数据赋值给变量
select @name := name,name from my_student;
select @name;
方案2:只有赋值不看结果:要求很严格:数据记录最多只允许获取一条:mysql不支持数组
Select 字段列表 from 表名 into 变量列表;
select name,age from my_student into @name,@age;
select name,age from my_student where id = 2 into @name,@age;
select @name ,@age;
所有自定义的变量都是会话级别:当前客户端当次连接有效
所有自定义变量不区分数据库(用户级别)