优秀的编程知识分享平台

网站首页 > 技术文章 正文

MySQL数据库之触发器具体讲解(mysql触发器的三种触发事件)

nanyue 2024-09-23 10:43:34 技术文章 5 ℃

触发器是MySQL的数据库对象之一,该对象与编程语言中的函数非常相似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现执行。

那么为什么要使用数据库对象触发器呢?在具体开发项目时,经常会遇到如下实例:

A:在学生表中拥有字段学生名字,字段学生总数,每当添加一条关于学生记录时,学生的总数就必须同时改变。

B:在顾客信息表中拥有字段顾客名字,字段顾客的电话和字段顾客的地址缩写,每当添加一条关于顾客记录时,都需要检查电话号码格式是否正确,顾客地址缩写是否正确。

上述实例虽然所需要实现的业务逻辑不同,但是它们也有共同之处,即都需要在表发生更改时,自动进行一些处理。这时就可以使用触发器处理数据库对象,例如,对于第一个实例,可以创建一个触发器,每次添加一条学生记录时,就执行一次学生总数的操作,这样就可以保证每次添加一条学生记录后,学生总数与学生记录数一致。查看帮助文档,可以发现MySQL软件在触发如下语句时,就会自动执行所设置的操作。

DELETE语句

INSERT语句

UPDATE语句

其他SQL语句不会激活触发器。在具体的应用中,之所以会经常使用触发器数据库对象,是由于该对象能够加强数据库表中数据的完整性约束和业务规则等。

触发器的创建包括创建触发器、查看触发器以及删除触发器。创建触发器可分为“一条执行语句的触发器”和“多条执行语句的触发器”。

创建有一条执行语句的触发器,其语法形式如下:

Create trigger trigger_name before|after trigger_event on table for each row trigger_stmt

在上述语句中,trigger_name 参数表示所要创建的触发器的名字,在具体创建触发器时,触发器标识符不能与已经存在的触发器重复。Before和after 参数指定了触发器的执行时间,其中前者是指触发器时间之前执行触发器语句,后者是指触发器事件之后执行触发器语句。Trigger_event 参数表示触发事件,即触发执行条件,包含DELETE语句、INSERT语句、UPDATE语句。Table_name表示触发器事件操作表的名字。For each row 参数表示任何一条记录上的操作满足触发器事件都会触发该触发器。Trigger_stmt参数表示激活触发器后被执行的语句。

创建有多条执行语句的触发器,其语法形式如下:

Create trigger trigger_name before|after trigger_event on table for each row

Begin

trigger_stmt

end

在MySQL软件中,一般情况下用“;”符号作为语句的结束符号,可是在创建触发器时需要用到“;”符号作为trigger_stmt中的分隔符号。为了解决该问题,可以使用关键字delimiter语句,例如”delimiter $”,可以用来实现将结束符号设置成“$”。

例如如下的执行语句:

Delimiter $

Create trigger trigger_diarytime

After insert

On table_tept for each row

Begin

Insert into table_diary values(null,’table_dept’,now());

Insert into table_diary values(null,’table_dept’,now());

End

$

Delimiter ;

查看触发器执行语句:

Show trigger \G

删除触发器执行语句:

Drop trigger trigger_name

关于触发器就讲到这里,想了解更多知识内容可加群588678536,群文件可下载更多文档。

最近发表
标签列表