MySQL编程--自定义造数

基本语法形式

语句块模式
在mysql编程中,begin…end结构相当于原来编程语句中的{…}语法,但又有所区别,一个begin…end;块,可以给定一个标识符,并且可以使用leave语句来“退出”该语句块

xxx_label:标识符,可以省略,但如果在结构中需要退出,那就需要它,前后必须同名
[begin_label:] BEGIN
	[statement_list]
END [end_label]	

流程控制语句

  • statement_list语句块可以用begin…end结构

if语句

if 条件语句 then
	begin
		statement_list
	end;
	elseif search_condition then
	begin
		statement_list
	end;
	else
	begin
		statement_list
	end;
end if;	

case语句

case case_value
	when when_value then statement_list
	...
	else statement_list
end case
case 
	when search_condition then statement_list
	...
	else statement_list
end case

loop语句

while语句

[begin_label:] while search_condition do
	statement_list
end	while [end_label]

变量

变量声明

变量的声明只能在begin…end结构中

declare 变量名 变量类型 [default 初始值]

变量赋值

以下语法中变量形式的区别:

  • “@变量名(会话变量)”形式可以在非程序语句中(如:命令环境)使用
  • 不带“@”的变量名只能在程序语句中(比如begin…end范围)且需要先声明才能赋值
  • set 变量名 = 表达式; 	
    #变量需要先声明
    
  • set @变量名 = 表达式; 
    变量不需要声明,可直接赋值
    
  • select @变量名 := 表达式; 
    此语句会给该变量赋值,同时还会作为一个select语句输出“结果集”
    
  • select 表达式 into @变量名
    此语句虽然看起来是select语句,但其实并不输出“结果集”,而只是给变量赋值
    

存储过程

什么是存储过程

相当于没有返回值的方法:只处理“事情”(包括增删改查等),不返回单个数据值(但可以得到select的查询结果)

存储过程的定义

create procedure 存储过程名([in|out|inout]形参1 类型1, in|out|inout]形参2 类型2, ...)
begin
	# 函数代码
	# 可以有增删改查,流程控制
	# 其中查询语句(select)会作为存储过程调用的结果,跟执行select语句一样,返回结果集
end

其中
in、out、inout用于修饰一个形参的"数据流向":
in:只作为外部输入数据,调用环境传入存储过程内部,默认值
out:只作为输出数据,即存储过程传出到调用环境,调用的时候必须是一个变量
inout:具有双重意义

调用与删除

调用
call 存储过程名(实参1, 实参2, ...)

删除
drop procedure [if exists] 存储过程名

存储函数

  • 注:delimiter $ # 将mysql中的结束标志;修改为$

什么是存储函数

相当于有返回值的方法:必须在完成一定的"操作"后返回单个数据值(一个具体数据或变量数据)
存储函数中不能有select语句–因为select语句会返回结果集,但存储函数只能返回"单个数据值"

存储函数的定义

create function 函数名(形参1 类型1, 形参2 类型2, ...)
return 返回类型
begin
	# 函数代码
	return xx值
end;

调用与删除

跟系统函数的调用形式一样,可用于select语句中,比如:
select now() as timenow,fun(1) as f;

删除
drop function [if exists] 存储函数名

触发器

什么是触发器

触发器就是在数据库中预先设定好的用于在某个表上发生某个事件(增/ 删 /改)的时候来完成某些任务的一种代码机制
现实中类似的离职就是银行金库的红外线扫描入侵报警器

触发器的创建

create trigger 触发器名 before(after) insert(updatedelete) on 表名 for each row 
begin
	# 要执行的代码
	# 不能使用select语句
end;

在触发器内部,其中有两个关键字具有特定含义和数据获取作用
new:代表新插入的一条数据,在insert事件的时候有效
old:代表旧的一条数据,在update或delete事件的时候有效

触发器的删除

drop trigger [if exists] 触发器名

mysql编程总结

  • 两种环境
    常规mysql命令环境:可以执行增删改查语句
    编程环境:在特定的语句语法内部,即存储过程内、存储函数内、触发器内
    
  • 两种变量
    普通变量:不带@符号,直接写变量名,必须先声明后使用,只能用于编程环境
    会话变量:带@符号,无需声明,直接使用,两种环境均可用
    
  • 流程控制语句
    只能用于编程环境
    
  • 存储过程、存储函数、触发器共同点
    可以使用普通变量
    可以使用流程控制结构
    本质都是一段存在数据库的代码
    
  • 存储函数
    需要返回一个数据值
    不能有select语句
    调用时直接作为一个“数据”来使用,即可以用于select或别的各种数据操作语句中
    
  • 存储过程
    不能反悔数据
    可以有select语句
    形参可以设定数据的进出方法:in、out、inout
    调用是使用call语句
    
  • 触发器
    不能返回数据
    不能有select语句
    没有参数,也不能调用,而是在触发的情况下自动调用执行
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值