MySQL(存储过程触发器)

时间:2021-11-03 05:02:38

1.存储过程分为两种:函数和过程,使用call命令来调用过程,函数可以嵌套在一条sql语句中,过程接受参数,函数有返回值。

2.定义一个存储过程中的函数:

MySQL(存储过程触发器)

delimiter $$把mysql客户端命令解析器的结束符号‘;’分号转换成$$符号,因为在mysql客户端程序中每条命令的结束是以分号结束的,但是存储过程中的函数结束也是使用的分号,为了在mysql client中逐条编写存储过程,需要将解释器的命令定义为分号以外的其他字符。founction shorten有两个参数,isnull()判断出入的字符串是否为空,left将字符串长度从左开始截取为长度n,concat将多个字符串连接成一个字符串。

执行存储过程:select name,shorten(name,3) from my_student;

MySQL(存储过程触发器)

创建存储函数:create function functionname(parameterlist) return datatype [options] sqlcode;存储过程:create procedure   functionname(parameterlist)  [options] sqlcode;函数有返回值而过程没有返回值。

删除sp(存储过程或函数):drop function|procedure [if exists] name;if exists是可选项,即如果存在就删除。

查看sp:show function status;

查看sp的代码:show create function name;

调用sp过程:call database.spname();

对局部变量进行赋值:set var1=value;select var:=value;select count(*) from student into var;select 2*7 into var;select name,id from my_student where id=1 into @myname,@myid;

3.触发器:

创建触发器的命令:

create trigger name before|after update|insert|delete on tablename for each row code;

old.column:返回update和delete在被修改之前的内容。

new.column:返回insert和update在被修改之后的内容。

删除触发器:drop [databasename.]triggername;

一个触发器例子:

create trigger trigger_befor_insert before insert on my_student for each row begin if new.percent<0 or new.percent>1 then set new.percent=0.7;end if;end$$

在此后你没插入一条数据都会检查percent字段的值,如果不符合范围将把他设置成0.7;

在插入一条数据时将auto_increment字段id设置为了一个比较的值。通过下面命令查看当前的auto_increment的值。

select auto_increment from information_schema.tables where table.schema='数据库名' and talbe.name='表名';

通过下面语句修改auto_increment 的值:

alter table tablename auto_increment=number;这里要注意修改的值只能比当前的auto_increment的值大,否则会失败。