10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国Ltr)- 41.2 mb
PDF (A4)- 41.3 mb
PDF (RPM)- 39.5 mb
HTML下载(TGZ)- 9.3 mb
HTML下载(Zip)- 9.3 mb
HTML下载(RPM)- 7.8 mb
手册(TGZ)- 260.6 kb
手册(Zip)- 371.8 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

13.1.22 CREATE TRIGGER语句

创建[definer = .用户)引发trigger_nametrigger_timetrigger_eventtbl_name对于每一行[trigger_ordertrigger_bodytrigger_time:{在|之前后}trigger_event: {insert | update | delete}trigger_order:{跟在|后面}other_trigger_name

这个语句创建了一个新的触发器。触发器是与表相关联的命名数据库对象,当表发生特定事件时触发。触发器与已命名的表相关联tbl_name,它必须引用一个永久表。不能将触发器与临时表或视图。

触发器名称存在于模式名称空间中,这意味着所有触发器在模式中必须具有惟一的名称。不同模式中的触发器可以具有相同的名称。

本节描述创建触发器语法。有关其他讨论,请参见第25.3.1节“触发器语法和示例”

创建触发器要求触发与触发器关联的表的特权。如果定义者子句存在时,所需的特权取决于用户价值,如在第25.6节,“存储对象访问控制”.如果启用了二进制日志记录,创建触发器可能需要超级特权,如在第25.7节“存储程序二进制日志记录”

定义者子句确定在触发器激活时检查访问特权时要使用的安全上下文,如本节后面所述。

trigger_time是触发动作时间。它可以是之前指示触发器在要修改的每一行之前或之后激活。

基本列值检查发生在触发器激活之前,因此不能使用之前触发器将不适合列类型的值转换为有效值。

trigger_event指示激活触发器的操作类型。这些trigger_event允许的值:

trigger_event并不表示激活触发器的SQL语句的文字类型,而是表示表操作的类型。例如,插入触发器激活的不仅仅是插入声明,但也加载数据语句,因为这两个语句都将行插入到表中。

一个可能令人困惑的例子是插入…重复密钥更新…语法:之前插入触发器为每一行激活,然后是后插入触发或同时触发在更新之前而且后更新触发器,这取决于该行是否有重复的键。

请注意

级联外键动作不会激活触发器。

可以为具有相同触发器事件和操作时间的给定表定义多个触发器。例如,你可以有两个在更新之前表的触发器。默认情况下,具有相同触发事件和操作时间的触发器按创建的顺序激活。要影响触发器顺序,请指定atrigger_order指示遵循之前以及具有相同触发事件和动作时间的现有触发器的名称。与遵循,新触发器在现有触发器之后激活。与之前,新触发在现有触发之前激活。

trigger_body是触发器激活时要执行的语句。方法可执行多条语句开始……结束复合语句结构。这还使您能够使用存储例程中允许使用的相同语句。看到第13.6.1节,“开始…复合语句".有些语句在触发器中是不允许的;看到第25.8节,“存储程序的限制”

在触发器主体内,可以使用别名引用主题表(与触发器关联的表)中的列而且老了。col_name指更新或删除现有行的列之前的列。新的。col_name引用要插入的新行或更新后的现有行的列。

触发器不能使用新的。col_name或使用老了。col_name引用生成的列。有关已生成列的信息,请参见第13.1.20.8节“创建表和生成的列”

MySQL存储sql_mode系统变量设置在触发器创建时生效,并且总是在此设置生效时执行触发器主体,不管触发器开始执行时的当前服务器SQL模式是什么

定义者子句指定在触发器激活时检查访问权限时要使用的MySQL帐户。如果定义者从句是存在的用户值应该是MySQL帐户指定为user_name“@”host_nameCURRENT_USER,或CURRENT_USER ().允许用户值取决于您持有的特权,如中所讨论的第25.6节,“存储对象访问控制”.有关触发器安全性的其他信息,请参见该部分。

如果定义者子句时,默认定义者是执行创建触发器声明。这与指定是一样的Definer = current_user明确。

MySQL采用定义者当检查触发器权限时,用户进入帐户如下:

  • 创建触发器时,发出该语句的用户必须具有触发特权。

  • 在触发器激活时,根据定义者用户。该用户必须具有以下权限:

    • 触发主题表的特权。

    • 选择如果对表列的引用使用老了。col_name新的。col_name在触发体中。

    • 更新如果表列是的目标,则指定主题表的特权新设置。col_name价值触发器主体中的赋值。

    • 触发器执行的语句通常需要的其他特权。

在触发器体中CURRENT_USER函数返回在触发器激活时用于检查特权的帐户。这是定义者用户,而不是触发触发的用户。有关触发器内用户审计的信息,请参见第6.2.22节,“基于sql的帐户活动审计”

如果你使用锁表要锁定具有触发器的表,触发器中使用的表也会被锁定,如中所述锁表和触发器

有关触发器使用的其他讨论,请参见第25.3.1节“触发器语法和示例”