MySQL进阶(一)

前面学习了MySQL中的一些比较基础的用法,接下来我们开始关于MySQL的进一步学习......

首先,我们要学习MySQL中的过程式对象,过程式对象主要有存储过程、存储函数、触发器和事件。

在使用中,过程式对象具有以下优势:

a、在服务端运行,执行速度快;

b、执行一次后,其执行规划就驻留在高速缓冲存储器中,以后的操作中,直接调用已经变异好的二进制代码执行就可以,提高了系统性能;

c、通过编程方式操作数据库,可以通过控制过程式对象的权限来控制对数据库信息的访问,确保数据库的安全。

以下,简单介绍存储过程、存储函数以及触发器。

一、存储过程

存储过程是存放在数据库中的一般程序,是数据库对象之一。存储过程可以由程序、触发器或另一个存储过程来调用它而激活,实现代码段中的SQL语句。

在存储过程中可以声明局部变量,它们可以用来存储临时结果。是要声明局部变量必须使用declare语句,声明的同时也可以对其赋一个初始值。

局部变量只能在begin...end语句块中声明。局部变量必须在存储过程的开头就声明,声明完后,可以在声明它的begin...end语句块中使用,其他语句块中不可以使用。

delimiter $$       --改变分隔符

create procedure 名称(参数)
begin
    sql语句;
end$$
delimiter ;

call 名称(参数)$   --调用存储过程

上式中,首先重新定义了分隔符,是因为在存储过程中的sql语句以分号结束,若不改变分隔符则遇到分号就被视为过程结束,会报错。同时,存储过程是可以编程的,意味着可以使用变量,表达式以及控制语句等来完成复杂的功能。

delimiter $$

--计算1到n的和
create procedure p2(in n int)

begin
declare i int default 0;
declare sum int default 0;
while i<=n do
    set sum := sum + i;
    set i := i + 1;
end while;
select sum ;
end$$

call p2(5)$$

上式中,设计局部变量、表达式以及控制语句,实现了计算1到n的和的功能。

其中,参数的设置一般有三种类型【in、out、inout】。

in为输入型参数,out为输出型参数,inout为输入输出型参数。

二、存储函数

与存储过程很相似,都是由SQL语句和过程式语句组成的代码片段,并且可以从应用程序和SQL中调用。

不同的是:

a、存储函数不再拥有输出参数,因为存储函数本身就是一个输出参数;

b、不能用call语句来调用存储函数。

c、必须包含一条return语句,但这条特殊的SQL语句不允许包含在存储过程中。

delimiter $$

create function sumN(n int) returns int[返回值类型]
begin
declare i int default 0;
declare sum int default 0;

while i<=n do
	set sum := sum + i;
	set i := i + 1;
end while;

return sum;
end$$

delimiter ;

select sumN(5);

如上,如果return中包含select语句时,select语句的返回结果只能是一行且只能有一列值。

三、触发器(trigger)

触发器是用于保护表中数据的,触发器不需要调用,当有操作影响到触发器保护的数据时,触发器会自动执行。利用触发器可以方便地实现数据库中数据的完整性。

delimiter $$
create trigger t1 --【触发器名称】
after --【触发时间,有after/before】
delete --【监听事件,有delete/update/insert等】
on employees --【监视地址,即在该表上发生触发事件才会激活触发器】
for each row  --【行级触发器,每一次触发都会执行所有语句】
begin
delete from salary where eid = old.eid; --【触发器激活时要执行的语句】
end$$
delimiter ;

--其中旧行用old表示,新行用new表示

在触发时间的选择上,要注意特别的事件,例如购买的商品量的触发事件等。

你可能感兴趣的:(MySQL进阶(一))