内置函数:mysql提供的函数,像c语言那种strlen()那种给你写好的函数直接用
常用的:
convert(x,type) #以type类型返回x
cast(x as type) #以type类型返回x
left() #截取返回左侧指定个字符
right() #截取返回右侧指定个字符
lpad() #按照限定长度从左到右截取字符串,当字符串的长度小于限定长度时在左侧填充指定的字符
rpad() #按照限定长度从左到右截取字符串,当字符串的长度小于限定长度时在右侧填充指定的字符
instr() #返回子串在一个字符串中第一次出现的位置
LTRIM() #删除字符串左侧的空格,并返回删除后的结果
RTRIM() #删除字符串右侧的空格,并返回删除后的结果
TRIM() #删除字符串左右两侧的空格,并返回删除后的结果
INSERT() #从字符串的指定位置开始使用子串替换指定长度的字符串
REPLACE() #使用指定的子串替换字符串中出现的所有指定字符
CONCAT() #将参数连接成一个新字符串
例子:SELECT CONVERT(3.6/-1.2,SIGNED) res1,CAST(0.5/1 AS UNSIGNED) res2;
_____________________________________________________________________________
自定义函数:
用户自定义函数,是由多条语句组成的语句块,每条语句都是一个符合语句定义规范的个体,需要语句结束符——分号;
MySQL一旦遇见语句结束符就会自动开始执行,但函数是一个整体,只有在被调用时才会被执行,那么在定义函数时就需要临时修改语句结束符。
delimiter 新结束符号
自定义函数
新结束符号 #事实上函数到这里就结束了
delimiter ; #改回原来的分号
;
delimiter修改语句结束符后,自定义函数中就可正常使用分号结束符,系统由于不再将分号作为语句结束符,从而不会自动执行自定义函数的SQL语句
创建函数:
create function 函数名([参数名 数据类型, …]) returns 返回值类型
[begin]
# 函数体
return 返回值数据; # 数据必须与结构中定义的返回值类型一致
[end]
调用函数:select 函数名1(实参列表), 函数名2(实参列表), …;
删除自定义函数:drop function 函数名;
_____________________________________________________________________________
存储过程:在第一次使用经过编译后,再次调用就不需要重复编译,因此执行效率比较高。
存储过程与函数的相同点在于,它们的目的都是为了可重复地执行数据库SQL语句的集合,并且都是经过一次编译后,后面再次需要时直接执行即可
存储过程与函数的不相同点有四个,具体如下。
1.语法中实现的标识符不同,存储过程使用PROCEDURE,函数为FUNCTION。
2.存储过程在创建时没有返回值,而函数在定义时必须设置返回值。
3.存储过程没有返回值类型,且不能将结果直接赋值给变量;而函数定义时需要设置返回值类型,且在调用时必须将返回值赋给变量。
4.存储过程必须通过CALL进行调用,不能使用SELECT调用;而函数则可在SELECT语句中直接使用。
DELIMITER 新结束符号
CREATE PROCEDURE 过程名字([[ IN | OUT | INOUT ] 参数名称 参数类型])
BEGIN
过程体
END
新结束符号
DELIMITER ;
;
调用存储过程:call 数据库名.存储过程名称([实参列表]);
删除存储过程:drop procedure [IF EXISTS] 存储过程名称;
_____________________________________________________________________________
错误处理
declare 错误名称 condition for [错误类型]
declare 错误处理方式 handler
for 错误类型 [, 错误类型] …
程序语句段
_____________________________________________________________________________
变量
show varlables; #不带任何条件则可以获取当前连接中系统所有有效的变量
局部修改的系统变量,只需在本次连接中有效,并且不影响其他连接使用时,只能使用局部修改。
set 变量名 = 新值;
全局方式修改系统变量,对所有正在连接的客户端无效,它只针对新连接的客户端永久生效。
# 语法1
SET GLOBAL 变量名 = 值;
# 语法2
SET @@GLOBAL.变量名 = 值;
会话变量:用户自定义的变量
赋值
方式1:set @变量名=值;
方式2:select @变量名:=值;
方式3:select 字段1,字段2,...... from 表名 into @变量1,@变量2......;
查值
select @变量名;
局部变量
declare 变量名1 [, 变量名2] … 数据类型 [DEFAULT 默认值]
_____________________________________________________________________________
判断(常用在where后)
if(条件表达式, 表达式1, 表达式2)
当条件表达式的值为true时,返回表达式1的值,否则返回表达式2的值。(有点像三目运算符)
if 条件表达式1 then 语句列表
[else if 条件表达式2 then 语句列表]
......
end if #if结束
当条件表达式1为真时,执行对应then子句后的语句列表。条件表达式1为假时,继续判断条件表达式2是否为真,若为真,则执行依次类推。都为假,则执行ELSE子句后的语句列表。
#第一种
case 条件表达式
when 表达式1 then 结果1
......
[ELSE 结果]
end
使用case的条件表达式与when后子句中的表达式进行比较,直到与其中的一个表达式相等时,则输出对应的then子句后的结果。(有点像c语言switch)
#第二种
case 条件表达式
when 表达式1 then 结果1
......
[ELSE 结果]
end case
then子句后执行的内容:前者的语句列表必须由一个或多个SQL语句组成,不可以为空;而后者的结果只能是一个表达式,不可以是SQL语句。
_____________________________________________________________________________
循环
[标签:] loop
语句列表
end loop [标签];
(在语句列表中需要给出结束循环的条件,否则死循环)
[标签:] repeat
语句列表
until 条件表达式
end repeat [标签] #判断until后的表达式是否为真,若为真,则结束循环,否则继续循环
程序会无条件执行一次repeat的语句列表(有点像c语言的do whlie)
while 条件表达式
do
语句列表
end while;
类似c语言的while
iterate 标签; #用于结束本次循环,开始下一轮循环,重新开始循环(类似C语言continue)
leave 标签; #用于终止当前循环,跳出循环体(类似C语言break)
_____________________________________________________________________________
游标(有点像指针)
流程:
declare 游标名称 cursor for select语句; #定义游标
open 游标名称; #打开游标
fetch 游标名称 into 变量名 [, 变量名] …; #利用游标检索数据(fetch语句根据指定的游标名称将检索出来的数据存放到对应的变量中)
close 游标名称; #关闭游标
_____________________________________________________________________________
触发器(可以看作特殊类型的存储过程)
触发器是在预先定义好的事件(如INSERT、DELETE等操作)发生时,才会被MySQL自动调用。
create trigger 触发器名字 触发时机 触发事件 on 表 for each row 触发顺序
begin
操作的内容
end
(通俗来说就是自己从新定义一种INSERT、DELETE等操作,类似c++运算符重载)
_____________________________________________________________________________
事件(特定事件的定时处理):MySQL中的事件是由事件调度器Event Scheduler(特殊的线程)执行和管理的,默认情况下处于关闭状态。show varlables like 'event_scheduler'; #查看调度器开没有,off是关,on开
set global event_scheduler=1;#开启时间调度器
create event 事件名称 #创建事件
on schedule 时间与频率 #定义事件开始、结束、持续的时间,执行的频率
do 事件执行的任务主体 #执行任务主体要放在begin......end里面
_____________________________________________________________________________