15
2020
11

MySQL触发器怎么写?

MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。

 

在MySQL中,创建触发器语法如下:

 

CREATE TRIGGER trigger_name trigger_time

trigger_event ON tbl_name FOR EACH ROW

trigger_stmt

 

其中:

 

trigger_name:标识触发器名称,用户自行指定;

 

trigger_time:标识触发时机,取值为BEFORE或AFTER;

 

trigger_event:标识触发事件,取值为INSERT、UPDATE或DELETE;

 

tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;

 

trigger_stmt:触发器程序体,可以是一句SQL语句,或者用BEGIN和END包含的多条语句。

 

由此可见,可以建立6种触发器,即:BEFOREINSERT、BEFOREUPDATE、BEFOREDELETE、AFTERINSERT、AFTERUPDATE、AFTERDELETE。

 

另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。假设系统中有两个表:

 

● 班级表class(班级号classID,班内学生数stuCount)

 

● 学生表student(学号stuID,所属班级号classID)

 

要创建触发器来使班级表中的班内学生数随着学生的添加自动更新,代码如下:

 

create trigger tri_stuInsert after insert on student for each row

begin

declare c int;

set c = (select stuCount from class where classID=new.classID); 

update class set stuCount = c + 1 where classID = new.classID;

 

查看触发器:和查看数据库(showdatabases;)查看表格(showtables;)一样,查看触发器的语法如下:

 

SHOW TRIGGERS [FROM schema_name];

 

其中,schema_name即Schema的名称,在MySQL中Schema和Database是一样的,也就是说,可以指定数据库名,这样就不必先“USE database_name;”了。

 

删除触发器:和删除数据库、删除表格一样,删除触发器的语法如下:

 

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

 

其中,schema_name即Schema的名称,在MySQL中Schema和Database是一样的,也就是说,可以指定数据库名,这样就不必先“USEdatabase_name;”了。

 

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。