代码执行结构:顺序结构 分支结构 循环结构
分支结构:实现准备多个代码块,按照条件选择性执行某段代码;
在mysq中只有if分支
基本语法 if 条件判断 then
-- 满足条件执行的代码;
else
-- 不满足条件执行代码;
end if;
delimiter %% create trigger before_order before insert on t_order for each row begin -- 判断商品库存是否够 -- 获取商品库存 select total from t_product where id=new.pid into @total; if @total<new.amount then -- 库存不足 触发器没有提供一个可以阻止事件发生的能力(暴力报错) insert into XXX values(xxxx); end if; end %% delimiter ;
循环结构:某段代码在指定条件执行重复执行;没有for循环
while循环语法
while 条件判断 do -- 满足条件要执行的代码
-- 变更循环条件
end while;
循环控制:在循环内部进行循环判断和控制;
Mysql中没有continue和break 但是有替代品
iterate迭代 类似continue 后面代码不执行 循环重新来过
leave离开 类似break 整个循环结束
使用方式:iterate /leave 循环名字
循环名字:while 条件 do
-- 循环体
-- 循环控制
leave/iterate 循环名字;
end while;
函数分为两类:系统函数和自定义函数
系统函数:系统定义好的函数,直接调用即可;
任何函数都有返回值,函数的调用是通过select 调用;
mysql中字符串的基本操作单位是字符
substring(字符串,起始位置,结束位置)
char_length();
length();返回字节长度
instr();判断字符串在某个具体字符串中存在,存在返回位置,不存在返回0
lpad();左填充,将字符串按某个指定的填充方式填充到指定长度(字符)
insert;替换 找到目标位置制定长度的字符串替换成目标字符串;
strcmp:字符串比较,不区分大小写,小于返回-1,等于返回0,大于返回1;
自定义函数
语法:create function 函数名([形参列表]) returns 数据类型 -- 规定要返回的数据类型
begin
-- 函数体
-- 返回值:return 类型(指定数据类型)
end
自定义函数与系统函数调用方式是一样的:select 函数名([实参列表]);
查看所有函数 show function status [like 'pattern'];
函数属于数据库只有对应数据库才可以使用;
查看函数创建语句 show create function函数名;
函数只能先删除后新增,不能修改
drop function 函数名;
计算1-指定数之和
delimiter $$ create function display1(int_1 int) returns int begin set @i=1; set @res=0; while @i<=int_1 do set @res = @res+@i; set @i =@i+1; end while; return @res; end $$ delimiter ; 函数内部定义变量@res在函数外部也可以访问
作用域:mysql中作用域与js完全一样;全局变量可以在任何地方使用,局部变量只能在函数内部使用;
全局变量:使用set关键字定义,使用@符号标志;
局部变量:使用declare关键字声明,没有@符号;
所有局部变量必须声明在函数体开始之前,局部变量赋值也要使用set关键字;