一、变量
1.系统变量
系统定义好的变量,大部分的时候用户不需要使用系统变量,系统变量是用来控制服务器的表现的。如autocommit, auto_increment_increment等。
查看系统变量:
-- 查看所有系统变量
show variables;
-- 查看具体变量值,任何一个有数据返回的内容都是由select查看
-- select @@变量名;
select @@version,@@autocommit,@@auto_increment_offset,@@character_set_results;
修改系统变量:
会话级别:临时修改,当前客户端当次连接有效
set 变量名 = 值;
Set @@变量名 = 值;
-- 修改会话级别变量
set autocommit = 0;
set @@autocommit = 0;
全局级别:一次修改,永久生效(对所有客户端都生效)
set global 变量名 = 值;
-- 修改全局级别变量
set global autocommit = 0;
如果对方(其他)客户端当前已经连上服务器,那么当次修改无效,要退出重新登录才会生效。
2.自定义变量
1)会话变量
定义变量:
set @变量名 = 值
-- 定义自定义变量
set @name = '张三';
- 第一次给其赋值,就算定义了
- 可以在编程环境和非编程环境中使用
- 使用的任何场合也都带该"@"符号
查看变量:
select @变量名;
-- 查看变量
select @name;
- 所有会话变量都是会话级别,当前客户端当次连接有效
- 所有会话变量不区分数据库(用户级别)
2)普通变量
declare 变量名 类型 【default 默认值】
- 必须先声明,声明时也可以赋值
- 只能在编程环境中使用(存储过程、函数、触发器)
3.变量赋值
a)语法1:此语法中的变量必须先使用declare声明
set 变量名 = 表达式;
b)语法2:此方式可以无需declare语法声明,而是直接赋值
set @变量名 = 表达式;
set @age := 18;
c)语法3:此语句会给该变量赋值,同时还会作为一个select语句输出'结果集'
select @变量名 := 表达式;
---- 如果使用 = 会变成比较
-- select @变量名 := 字段名 from 数据源;
select @name := name,name from student;
d)语法4:此语句虽然看起来是select语句,但其实并不输出'结果集',而是给变量赋值
select 表达式 into @变量名;
---- 要求很严格,数据记录最多只允许获取一条
-- select 字段列表 from 表名 into 变量列表
select name,age from student where id = 2 into @name,@age;
二、运算符
1.算术运算符
+、-、*、/、%
mysql没有++和—运算符
2.关系运算符
>、>=、<、<=、=(等于)、<>(不等于)!=(不等于)
3.逻辑运算符
and(与)、or(或)、not(非)
三、语句块
四、顺序结构
五、分支结构
1.if判断
单分支:
if 条件 then
--代码
end if;
双分支:
if 条件 then
-- 代码
else
-- 代码
end if;
多分支:
if 条件 then
-- 代码
elseif 条件 then
-- 代码
else
-- 代码
end if;
2.case判断
case 变量
when 值 then 语句;
when 值 then 语句;
else 语句;
end case;
六、循环结构
Iterate:迭代,类似continue
leave:离开,类似break
使用方式:iterate/leave 循环名字
1.loop循环
标签名:loop
leave 标签名 --退出循环
end loop;
2.while循环
[标签:]while 条件 do
-- 代码
end while;
3.repeat循环
repeat
-- 代码
until 条件 end repeat;