MySQL数据库编程

内置函数: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里面

 


 

 

_____________________________________________________________________________

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值