我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

mysql触发器的作用及语法

触发器是一种特殊的存储过程,在特定表中插入、删除或修改数据时执行,具有比数据库本身标准功能更为精细和复杂的数据控制能力。

数据库触发器有以下作用:

1.安全性。可以根据数据库的数值赋予用户一定的权限来操作数据库。

# 可以根据时间限制用户操作,比如下班后或者节假日不能修改数据库数据。

# 你可以根据数据库中的数据来限制用户操作,比如不允许股票价格一次性上涨超过10%。

2、审计:可以跟踪用户对数据库的操作。

# 对用户操作数据库所使用的语句进行审计。

# 将用户对数据库的更新写入审计表。

3. 实施复杂的数据完整性规则

# 实施非标准数据完整性检查和约束。触发器可以生成比规则更复杂的限制。与规则不同,触发器可以引用列或数据库对象。例如,触发器可以回滚任何试图接收超过其保证金的期货。

# 提供可变的默认值。

4. 实现复杂的非标准数据库相关完整性规则。触发器可以对数据库中的相关表执行连续更新。例如,auths 表列上的删除触发器可能导致其他表中匹配行的相应删除。

# 修改或删除的时候,级联修改或删除其他表中匹配的行。

# 修改或删除的时候,将其他表中匹配的行设置为NULL值。

# 修改或删除时,级联将其他表中匹配的行设置为默认值。

# 触发器可以拒绝或回滚破坏关系完整性的更改,并取消尝试更新数据的事务。当插入与其主键不匹配的外键时,此触发器将起作用。例如,可以在 books. 列上生成插入触发器,如果​​新值与 auths. 列中的值不匹配,则回滚插入。

5、实时同步复制表中数据。

6、自动计算数据值,如果数据值达到一定要求,则进行特定处理。比如,如果公司账户内资金低于5万元,则立即向财务人员发出警示数据。

MySQL触发器语法详解。

1. 语法

每行开启

触发器是与表关联的命名数据库对象,当表上发生特定事件时被激活。

触发器与指定的表相关联。它必须引用永久表。不能将触发器与

表或视图。

是触发器的作用时间。它可以是 或 AFTER,以指示触发器是在激活它的语句之前或之后触发的。

指示激活触发器的语句类型。它可以是下列值之一:

:当新行插入到表中时(例如通过 LOAD DATA 和

陈述。

:当某一行被改变(例如通过一条语句)时,触发器就会被激活。

:当从表中删除一行时激活触发器,例如,通过和语句。

需要注意的是,这与以表操作的形式激活触发器的 SQL 语句不太相似。例如,

触发器不仅可以通过该语句激活,还可以通过LOAD DATA语句激活。

一个可能令人困惑的例子是 INTO.. ON ... 语法:

触发器针对每一行激活,然后是 AFTER 触发器,或者和 AFTER

根据行上是否存在重复键来触发程序。

对于给定的表,不能有两个具有相同触发动作时间和事件的触发器。

可以有两个触发器。但可以有一个触发器和一个

触发器,或者 1 个触发器和 1 个 AFTER 触发器。

触发器激活时执行的语句。如果要执行多个语句,可以使用 BEGIN ... END 来执行多个语句。

这使得您可以使用存储子程序中允许的相同语句。

DROP 语法

降低[。]

放弃触发器。方案名称 () 是可选的。如果省略 (),则将使用当前方案。

本案中,触发程序被放弃。

注意:从 MySQL 5.0.10 之前的 MySQL 版本升级到 MySQL 5.0.10 或更高版本(包括所有 MySQL 5.1

您必须在升级之前删除所有触发器,然后在升级之后重新创建它们。否则,DROP

不工作。

DROP 语句需要 SUPER 权限。

㈢使用触发程序

本节介绍如何在MySQL 5.1中使用触发器,并说明使用触发器的限制。

触发器是与表关联的命名数据库对象,当表上发生特定事件时被激活。

在序列的使用中,它可以用来检查插入到表中的值,或者计算涉及更新的值。

触发器与表相关联,并在表上执行、或语句时激活。

触发器被设置为在语句执行之前或之后激活。例如,它可以在从表中删除每一行之前激活,或者在更新每一行之后激活。

每行之后触发触发器。

要创建或删除触发器,请使用 DROP 或 语句。

触发器不能调用向客户端返回数据的存储过程,也不能使用CALL语句的动态SQL。

(允许存储过程通过参数将数据返回给触发过程)。

触发器不能使用显式或隐式开始或结束事务的语句,例如 START、

或者。

使用 OLD 和 NEW 关键字来访问受触发器影响的行中的列(OLD 和 NEW 不区分大小写)。

在触发器中,只能使用 NEW。没有旧行。在触发器中,只能使用 NEW。

OLD.,没有新行。在触发器中,可以使用 OLD. 引用更新前的行。

您还可以使用 NEW. 来引用更新行中的列。

以 OLD 命名的列是只读的。您可以引用它,但不能更改它。对于以 NEW 命名的列,如果您有

权限,就可以引用它。在触发器中,如果有权限,可以使用“SET NEW”。

=值”。这意味着您可以使用触发器来更改将插入到新行中的值。

或者更新行的值。

在触发程序中,该列的NEW值为0,在真正插入新记录时不会自动生成该值。

序列号已创建。

通过使用 BEGIN ... END 结构,您可以定义执行多个语句的触发器。在 BEGIN 块中,您还可以使用存储

子程序中允许的其他语法(如条件和循环)可用。但是,与存储子程序一样,您不能定义执行多个语句的语句。

如果使用mysql程序输入触发器程序,需要重新定义语句分隔符,以便在触发器中使用

程序定义中使用字符“;”。以下示例演示了这些要点。在此示例中,1

触发器检查更新每行时要使用的新值,并将该值更改为 0 到 100 范围内

它必须是一个触发器,因为在使用该值来更新行之前需要检查该值:

mysql> //

mysql> 开启

-> 对于每一行

-> 开始

-> 如果是新的。< 0 那么

-> 设置新。 = 0;

-> 新的。> 100 然后

-> 设置新。 = 100;

->结束如果;

-> 结束;//

mysql>;

一种更简单的方法是单独定义一个存储过程,然后使用简单的 CALL 语句从触发器调用该存储过程。

如果您计划从多个触发器中调用同一个子例程,此方法也很有用。

在触发器执行期间,MySQL 处理错误如下:

如果触发器失败,则不会执行相应行的操作。

· 仅当触发器(如果有)和行操作都成功执行时,才会执行 AFTER 触发器。

如果在触发器执行期间或触发器执行后发生错误,则调用该触发器的整个语句将无效。

句子失败。

对于事务表,如果触发器失败(从而整个语句失败),则语句的执行

所有更改都将被回滚。对于非事务表,无法执行这种类型的回滚,因此即使语句失败,也不会回滚失败之前所做的更改。

任何更改均保持有效。

示例 1:

mysql> 表(INT,(10,2));

mysql> 开启

-> 对每一行设置@sum = @sum + NEW.;

二维码
扫一扫在手机端查看

本文链接:https://by928.com/2606.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线