相关文件10bet官方网站 下载本手册 本手册摘录

MySQL 8.0参考手册/MySQL 8.0常见问题解答/ mysql 8.0常见问题:触发器

A.5 MySQL 8.0常见问题:触发器

A.5.1。我可以在哪里找到MySQL 8.0触发器的10bet官方网站文档?
A.5.2。有MySQL触发器的讨论论坛吗?
A.5.3。MySQL 8.0是否有语句级或行级触发器?
A.5.4。是否有默认的触发器?
A.5.5。如何在MySQL中管理触发器?
A.5.6。有没有办法查看给定数据库中的所有触发器?
A.5.7。触发器存储在哪里?
A.5.8。触发器可以调用存储过程吗?
A.5.9。可以触发访问表吗?
A.5.10。桌子可以有多个触发器,具有相同的触发事件和动作时间吗?
A.5.11。触发器是否有可能更新远程服务器上的表?
A.5.12。触发器是否与复制一起工作?
A.5.13。在复制到副本的源上,如何通过触发器执行操作?

A.5.1。

我可以在哪里找到MySQL 8.0触发器的10bet官方网站文档?

第25.3节,“使用触发器”

A.5.2。

有MySQL触发器的讨论论坛吗?

是的。它可供选择https://forums.10bet靠谱mysql.com/list.php?99.

A.5.3。

MySQL 8.0是否有语句级或行级触发器?

在MySQL 8.0中,所有触发器都是对于每一行;也就是说,触发器被激活,针对插入,更新或删除的每一行。MySQL 8.0不支持触发器使用对于每个陈述

A.5.4。

是否有默认的触发器?

没有明确。MySQL确实有一些特殊的行为时间戳列,以及使用的列AUTO_INCREMENT

A.5.5。

如何在MySQL中管理触发器?

在MySQL 8.0中,可以使用触发器使用创建触发器声明,并删除使用删除触发器.看第13.1.22节“创建触发语句”,第13.1.34节“Drop Trigger语句”,有关这些陈述的更多信息。

可以通过查询触发器的信息来获取Information_schema.triggers.桌子。看第26.3.45节“Information_schema触发表”

A.5.6。

有没有办法查看给定数据库中的所有触发器?

是的。您可以获得定义在数据库上的所有触发器的列表dbname.使用查询Information_schema.triggers.表如这里所示的表:

从information_schema中选择trigger_name, event_manipulation, event_object_table, action_statement。触发器,TRIGGER_SCHEMA = 'dbname.'

有关此表的更多信息,请参阅第26.3.45节“Information_schema触发表”

你也可以使用显示触发声明,它是特定于MySQL的。看第13.7.7.40节“Show Triggers声明”

A.5.7。

触发器存储在哪里?

触发器存储在mysql.triggers.系统表,这是数据字典的一部分。

A.5.8。

触发器可以调用存储过程吗?

是的。

A.5.9。

可以触发访问表吗?

触发器可以访问自己表中的旧数据和新数据。触发器也可以影响其他表,但是不允许修改调用函数或触发器的语句已经在使用(用于读写)的表。

A.5.10。

桌子可以有多个触发器,具有相同的触发事件和动作时间吗?

在MySQL 8.0中,可以为一个给定的表定义多个具有相同触发事件和动作时间的触发器。例如,你可以有两个在更新之前触发桌子。默认情况下,具有相同触发事件和动作时间的触发器按其创建的顺序激活。要影响触发顺序,请在后面指定条款对于每一行表明前面以及具有相同触发事件和动作时间的现有触发器的名称。和,新触发器在现有触发后激活。和前面,新触发器在现有触发器之前启动。

A.5.11。

触发器是否有可能更新远程服务器上的表?

是的。可以使用远程服务器上的表格使用联邦存储引擎。(看第16.8节,“联邦存储引擎”)。

A.5.12。

触发器是否与复制一起工作?

是的。但是,他们工作的方式取决于您是否使用MySQL的方式经典的基于语句的或基于行的复制格式。

使用基于语句的复制时,副本上的触发器由在源上执行的语句(并复制到副本)执行。

在使用基于行的复制时,由于在源上运行然后复制到副本的语句,所以不会在副本上执行触发器。相反,当使用基于行的复制时,在源上执行触发器所引起的更改将应用于副本。

有关更多信息,请参阅第17.5.1.36条,“复制和触发器”

A.5.13。

在复制到副本的源上,如何通过触发器执行操作?

同样,这取决于您是使用基于语句的复制还是基于行的复制。

基于语句的复制。首先,必须在复制服务器上重新创建源上存在的触发器。一旦完成了这一步,复制流就像参与复制的任何其他标准DML语句一样工作。例如,考虑一个表emp.那有一个插入触发器,在Replication Source Server上存在。相同emp.表和在副本服务器上也存在插入触发器。复制流将是:

  1. 一个插入发表声明emp.

  2. 触发emp.激活。

  3. 插入语句写入二进制日志。

  4. 复制品拾起了插入陈述emp.并执行它。

  5. 触发emp.副本上存在的激活。

基于行的复制。当您使用基于行的复制时,在源上执行触发器所引起的更改将应用于副本。但是,在基于行的复制下,触发器本身并不在副本上实际执行。这是因为,如果源和副本都应用了来自源的更改,而且导致这些更改的触发器也应用了副本,那么这些更改实际上会在副本上应用两次,从而导致源和副本上的数据不同。

在大多数情况下,基于行和基于语句的复制的结果是相同的。但是,如果在源和副本上使用不同的触发器,则不能使用基于行的复制。(这是因为基于行的格式将源上执行的触发器所做的更改复制到副本,而不是将导致触发器执行的语句复制到副本,并且副本上相应的触发器不会被执行。)相反,任何导致执行此类触发器的语句都必须使用基于语句的复制来复制。

有关更多信息,请参阅第17.5.1.36条,“复制和触发器”