MySQL包含对触发器的
支持。Trigger是一个与表
操作相关的数据库对象。当指定的事件发生在触发器表上时,它将被调用,也就是说,表的操作事件触发表上触发器的
执行。
创建一个触发器
在MySQL中,触发器语法如下所示创建:
复制代码代码如下所示:
创建触发器trigger_name
trigger_time
在tbl_name trigger_event
每一行
trigger_stmt
其中:
trigger_name:
识别的触发器的名称,而
用户将指定它本身;
trigger_time:识别的触发时间之前或之后。
trigger_event:识别触发,是珍贵的插入、更新或
删除事件;
tbl_name:识别的触发器的名称,这是在表上创建触发器。
trigger_stmt:触发体,可以是一个SQL语句或多个语句包含在开始和结束。
可以看出,可以
设置6种触发器,即插入前、更新前、删除前、插入后、更新后、删除后。
另一个限制是2个触发器不能同时建立在一个表上,所以最多6个触发器是在一个表上建立的。
trigger_event
详细解释
除了定义插入、更新和删除的基本操作之外,MySQL还定义了加载数据和
替换语句。这两个语句也可以触发上述6种
类型的触发器。
负载数据语句用于将
文件加载到数据表中,相当于一系列插入操作。
替换语句和INSERT语句一般类似于表中的主键或唯一索引,如果插入的数据和原始主键或唯一索引是一致的,将首先删除原始数据,然后添加一个新数据,也就是说,替换语句有时相当于A。
插入语句有时相当于带有INSERT语句的删除语句。
插入类型触发器:当插入一行时触发触发器,该触发器可能由插入、加载数据和替换语句触发。
更新类型触发器:当一行更改时触发触发器,这可能由更新语句触发。
删除类型触发器:删除一行时
激活触发器,该触发器可能由删除和替换语句触发。
开始…结束详细解释
在MySQL,开始…结束语句的语法是:
开始
{ statement_list }
结束
在这,statement_list代表一个或多个语句,每个列表中的语句必须以分号(;)。
在MySQL中,分号是语句的结束符,和分号表示该段语句结束,和MySQL可以开始执行。因此,译员开始后遇到的statement_list分号执行,然后
错误报道,因为没有终端匹配开始。
然后使用分隔符
命令(分隔符分隔符,含义),它是一个命令,不需要结束标记,语法:
分隔符new_delemiter
new_delemiter可以设置为1或更大的长度和符号,
默认是一个分号(;),我们可以
修改它以其他符号,比如$:
为分隔符
在此之后,语句以分号结束,解释器没有任何
反应。只有一美元,它被认为是声明的结束。注意使用后,我们应该记住修改它。
触发器的完整创建的一个示例
假定
系统中有两个表:
类的类(类数的ClassID,类数stucount)
学生名单的学生(学号愚蠢,班号classid)
要创建一个触发器来
自动更新学生列表中的学生人数,代码如下:
复制代码代码如下所示:
为分隔符
创建触发器tri_stuinsert插入后
每排学生
开始
声明C;
C =(选择stucount从ClassID =新课。classid);
更新类集stucount = C + 1 = new.classid classid;
美元
分隔符;
变量的详细方案
MySQL使用声明来定义一个局部变量,它只能在开始时……使用结束复合语句,应该在复合语句的开头定义。
在其他语句之前,语法如下:
声明var_name {,} {默认值类型…
其中:
var_name是变量的
名字,如SQL语句一样,变量名是大小写不敏感;对任何数据类型支持mysql型;我们可以同时定义多个同类型的变量,用逗号隔开;如果必要的变量的初始值是空的,,你可以使用默认条款提供默认值可以指定为一个表达。
set语句用于变量赋值,语法是:
集var_name =表达式{,} var_name =表达式…
新老说明
在上面的示例中,使用了新关键字,类似于插入和删除的MS Server,新的和旧的在MySQL中定义为代表。
在触发器表中,触发器的数据行被触发。
明确地:
在插入类型触发器中,新用来表示将插入(之前)或已经(之后)插入的新数据;
在更新类型触发器中,旧的用于表示将要被修改或已被修改的原始数据,新的用于表示将要或已经被修改的新数据。
在删除类型触发器中,旧用于表示将要删除或已被删除的原始数据;
用法:NEW.columnName(columnName是一个列表的对应数据表的名称)
另外,老是只读的,而新的可以在触发器中使用set赋值,因此它不会再次触发触发器,导致循环调用。例如,在插入一个学生之前,它会加上2013的学号。
查看触发器
与show数据库视图(show)视图窗体(
显示表)一样,查看触发器的语法如下所示:
从schema_name } {显示触发器;
其中,schema_name是架构的名称,这是架构和数据库MySQL,那
都是一样的,你可以指定数据库的名称,
我没有用database_name第一。
删除触发器
与删除数据库和删除表一样,删除触发器的语法如下所示:
删除触发器{如果存在} { } trigger_name schema_name。
触发器的执行
顺序 我们建立的数据库一般InnoDB数据库和表建立在他们的事务表,这是交易安全的。在这一点上,如果SQL语句或触发失败,MySQL将回滚事务,有:
(1)如果触发器失败,SQL不能
正确执行。
当SQL执行失败时,将不会触发后类型触发器。
(3)后类型触发器失败,SQL将回滚。
如果对MySQL触发器的使用有任何疑问,让我给大家留言,一起进步。