您当前位置:优侠库 > 资讯攻略 >
来源:未知
2022-04-11 17:40:36 浏览: 分类:资讯攻略

教你快速掌握 MySQL数据库中触发器的应用

触发器的概念:“为响应特殊表中的某些事件而在数据库中自动执行的程序代码。"(维基百科)简单来说,就是一段代码,当一个特殊的数据库事件,比如插入或者删除发生时,自动激活这段代码。触发器可以方便地用于记录和自动将单个表链接到其他链接表。级联类型'更改,或确保表关系自动更新。当一个新的整数值被添加到数据库域时,自动更新运行总数的代码段是一个触发器。自动记录对特殊数据库表所做更改的SQL命令块也是触发器的一个示例。

Trigger是mysql 5.x的一个新功能,随着5.x代码树新版本的出现,这个功能逐渐完善。在本文中,我将简要介绍如何定义和使用触发器,检查触发器的状态,以及在使用后删除触发器。我还将向您展示trigger在现实世界中的应用示例,并测试它对数据库记录的更改。

例子

简单的(尽管是人为的)例子是理解MySQL触发器应用的最佳方式。首先,我们设置两个单域表。一个表是名称列表(表名:数据),另一个表是插入的字符数(表名:字符)。我想在数据表中定义一个触发器。每次插入一个新名字,chars表中运行的总数将根据新插入记录中的字符数自动更新。

以下是引用的内容:MySQL >:创建表数据(name VARCHAR(255));

查询正常,0行受影响(0.09秒)

mysql & gt创建表格字符(count INT(10));

查询正常,0行受影响(0.07秒)

mysql & gtINSERT INTO chars (count)值(0);

查询正常,1行受影响(0.00秒)

mysql & gt插入后创建触发器t1

每行的数据更新chars SET count
= count+CHAR _ LENGTH(new . name);

查询正常,0行受影响(0.01秒)

理解上述代码的关键是CREATE TRIGGER命令,它用于定义一个新的触发器。该命令创建一个新的触发器,假定名称为t1,每次向数据表中插入新记录时都会激活该触发器。

该触发器中有两个重要的子句:

AFTER INSERT子句指示触发器在新记录插入数据表后被激活。

update chars set count = count+char _ length(new . name)子句表示触发器激活后执行的SQL命令。在此示例中,此命令指示chars.count列用新插入的data.name字段中的字符数进行更新。这些信息可以通过内置的MySQL函数CHAR_LENGTH()获得。

放在源表域名前面的新关键字也值得注意。该关键字表示触发器应该考虑域的新值(即刚刚插入到域中的值)。MySQL也支持相应的旧前缀,可以用来引用该域以前的值。

您可以通过调用SHOW TRIGGER命令来检查触发器是否被激活。

以下是引用的内容:MySQL >: SHOW TRIGGERSG

*************************** 1.第*****************行

?触发器:t1

?事件:插入

?表格:数据

语句:更新chars SET count = count+CHAR _ LENGTH(new . name)

时间:之后

?已创建:空

ql_mode:

集合中的1行(0.01秒)

激活触发器后,开始测试。尝试在数据表中插入几条记录:

以下是引用内容:MySQL >:INSERT INTO data(name)VALUES(' Sue '),(' Jane ');

查询正常,2行受影响(0.00秒)

记录:2?重复项:0?警告:0

然后检查chars表,查看触发器是否完成了它的任务:

以下是引用的内容:MySQL >:SELECT * FROM chars;

+ - +

|计数|

+ - +

| 7|

+ - +

集合中的1行(0.00秒)

正如您所看到的,数据表中的INSERT命令激活了触发器,该触发器计算插入到记录中的字符数,并将结果存储在chars表中。如果向数据表中添加另一条记录,chars.count值将相应增加。

应用触发器后,您可以使用DROP TRIGGER命令轻松删除它。

以下是引用内容:MySQL >:DROP TRIGGER t1;

查询正常,0行受影响(0.00秒)

注意:理想情况下,您还需要一个反转触发器,每当从源表中删除一条记录时,它就会从总字符数中减去记录的字符数。这很容易做到,你可以把它作为一个练习。提示:应用BEFORE DELETE ON子句是方法之一。

现在,我想建立一个审计记录来跟踪对这个表单所做的更改。该记录将反映表单中的每次更改,并向用户解释是谁在何时进行了更改。我需要建立一个新表来存储这些信息(表名:audit),如下所示。

以下是引用内容:MySQL >:CREATE TABLE audit(id INT(7),
balance FLOAT,user VARCHAR(50)

不为空,时间戳不为空);

查询正常,0行受影响(0.09秒)

接下来,我将在accounts表中定义一个触发器。

以下为引用内容:MySQL >:在帐户上更新后创建触发器t1

对于插入审计的每一行(id、余额、用户、时间)

VALUES (OLD.id,NEW.balance,CURRENT_USER(),NOW());

查询正常,0行受影响(0.04秒)

注意:每次更新帐户表时,触发器都会插入相应记录的id、新的余额、当前时间以及登录到审计表的用户的姓名。

关键词:应用程序、数据库、掌握、快速

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227235.html

攻略资讯
安卓软件
安卓游戏