网站建设资讯

NEWS

网站建设资讯

Mysql触发器怎么验证 mysql触发器详解

mysql 触发器怎么写

触发器是一个特殊的存储过程,存储过程是需要手动调用的,而触发器是程序自动出发的,比如在对某张表进行删除操作前执行触发器。可以设置在增删除操作前或者之后执行。下面就创建一个小例子。

10余年的平顶山网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整平顶山建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“平顶山网站设计”,“平顶山网站推广”以来,每个客户项目都认真落实执行。

方法/步骤

确认mysql服务开启。

连接mysql。

进入到相应的数据库,并查看相应表的数据。

创建触发器,当在向表t_user插入之前,向表user插入数据。

插入一条语句。

6

查看触发器是否执行。

mysql 触发器 怎么用?

方法/步骤

首先,我们需要确定自己的Mysql数据库的版本,因为my sql数据库是从5.0.2版本才开始支持触发器的。

我推荐大家在电脑的dos命令界面中输入 mysql --version,来获取mysql的版本号,注意version的两个横线和之前的mysql是有一个空格的。

上一步获取了我们的mysql版本号,这一不我们就开始建立触发器了。我采用的以视图加代码的方式创建,我们在数据表中找到要执行删除操作的表,然后右键设计表

这样我们就打开了表的设计页面,可以看到有一个触发器选项卡,我们点击“触发器”

可以看到对应的选项,我们在名里面添加我们需要新建的触发器的名字,在触发选项中选择before或者after,然后在插入、更新、删除三个选项中勾选一个。

这样我们就建立了一个名为“datri”的触发器,在删除操作执行之后触发

然后我们在下面的定义下面的框中输入我们需要执行的操作。然后点击sql预览,可以看到整个触发器的代码

最后就是保存了,由于我们做的是触发器,保存之后,在执行删除操作时,这个触发器才相当于 被执行。

连锁药店mysql触发器怎么写

语法说明如下。

1) 触发器名

触发器的名称,触发器在当前数据库中必须具有唯一的名称。如果要在某个特定数据库中创建,名称前面应该加上数据库的名称。

2) INSERT | UPDATE | DELETE

触发事件,用于指定激活触发器的语句的种类。

注意:三种触发器的执行时间如下。INSERT:将新行插入表时激活触发器。例如,INSERT 的 BEFORE 触发器不仅能被 MySQL 的 INSERT 语句激活,也能被 LOAD DATA 语句激活。DELETE: 从表中删除某一行数据时激活触发器,例如 DELETE 和 REPLACE 语句。UPDATE:更改表中某一行数据时激活触发器,例如 UPDATE 语句。

3) BEFORE | AFTER

BEFORE 和 AFTER,触发器被触发的时刻,表示触发器是在激活它的语句之前或之后触发。若希望验证新数据是否满足条件,则使用 BEFORE 选项;若希望在激活触发器的语句执行之后完成几个或更多的改变,则通常使用 AFTER 选项。

4) 表名

与触发器相关联的表名,此表必须是永久性表,不能将触发器与临时表或视图关联起来。在该表上触发事件发生时才会激活触发器。同一个表不能拥有两个具有相同触发时刻和事件的触发器。例如,对于一张数据表,不能同时有两个 BEFORE UPDATE 触发器,但可以有一个 BEFORE UPDATE 触发器和一个 BEFORE INSERT 触发器,或一个 BEFORE UPDATE 触发器和一个 AFTER UPDATE 触发器。

5) 触发器主体

触发器动作主体,包含触发器激活时将要执行的 MySQL 语句。如果要执行多个语句,可使用 BEGIN…END 复合语句结构。

如何检查mysql 触发器是否正常

这个你只能写sql 语句去数据库里面去查询触发器是否存在了 不是有个 if exists(SELECT * FROM information_schema.`TRIGGER `;) drop TRIGGER room_kq_detail_times

如何测试mysql触发器和存储过程

1.

为了测试触发器和存储过程,首先建立一张简单的表:

复制代码

代码如下:

CREATE

TABLE

`airuser`

(

`userId`

int(11)

NOT

NULL

AUTO_INCREMENT,

`username`

varchar(128)

NOT

NULL,

PRIMARY

KEY

(`userId`)

)ENGINE=InnoDB

DEFAULT

CHARSET=utf8

2.

为该表的插入操作,创建一张记录表:

复制代码

代码如下:

CREATE

TABLE

`airuser_record`

(

`id`

int(11)

NOT

NULL

AUTO_INCREMENT,

`username`

varchar(45)

DEFAULT

NULL,

`edittime`

timestamp

NULL

DEFAULT

NULL,

`edittype`

varchar(45)

DEFAULT

NULL,

PRIMARY

KEY

(`id`)

)

ENGINE=InnoDB

DEFAULT

CHARSET=utf8

3.

编写一个插入操作的触发器:

复制代码

代码如下:

DROP

TRIGGER

insert_trigger;

delimiter

|

CREATE

TRIGGER

insert_trigger

BEFORE

INSERT

ON

airuser

FOR

EACH

ROW

BEGIN

INSERT

INTO

airuser_record

SET

username

=

NEW.username,

edittime=now(),

edittype='insert';

END;

SHOW

TRIGGERS;

4.

为批量插入编写存储过程:

复制代码

代码如下:

DROP

procedure

createUsers;

delimiter

|

create

procedure

createUsers(IN

count

int)

begin

declare

i

int;

set

i=0;

while

icount

do

insert

into

airuser

set

username=concat('user_',i);

set

i=i+1;

end

while;

end;

show

procedure

status;

5.

调用存储过程,验证存储过程是工作的,并验证在插入记录前,触发器能正确被触发:

复制代码

代码如下:

call

createUsers(10);

6.

最后通过插入记录表再次验证:

复制代码

代码如下:

SELECT

*

FROM

mars_jpa.airuser_record;

mysql数据库触发器,怎么做满足条件触发

建立两个单域的表格。一个表格中为姓名列表(表格名:data)。

另一个表格中是所插入字符的字符数(表格名:chars)。在data表格中定义一个触发器。

每次在其中插入一个新姓名时,chars表格中运行的总数就会根据新插入记录的字符数目进行自动更新。

(见列表A)

mysql CREATE TABLE data (name VARCHAR(255));

Query OK, 0 rows affected (0.09 sec)

mysql CREATE TABLE chars (count INT(10));

Query OK, 0 rows affected (0.07 sec)

mysql INSERT INTO chars (count) VALUES (0);

Query OK, 1 row affected (0.00 sec)

mysql CREATE TRIGGER t1 AFTER INSERT ON

data FOR EACH ROW UPDATE chars SET count = count + CHAR_LENGTH(NEW.name);

Query OK, 0 rows affected (0.01 sec)

列表A

理解上面代码的关键在于CREATE TRIGGER命令,被用来定义一个新触发器。这个命令建立一个新触发器,假定的名称为t1,每次有一个新记录插入到data表格中时,t1就被激活。

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

AFTER INSERT子句表明触发器在新记录插入data表格后激活。

UPDATE chars SET count = count + CHAR_LENGTH(NEW.name)子句表示触发器激活后执行的SQL命令。在本例中,该命令表明用新插入的data.name域的字符数来更新 chars.count栏。这一信息可通过内置的MySQL函数CHAR_LENGTH()获得。

放在源表格域名前面的NEW关键字也值得注意。这个关键字表明触发器应考虑域的new值(也就是说,刚被插入到域中的值)。MySQL还支持相应的OLD前缀,可用它来指域以前的值。

可以通过调用SHOW TRIGGER命令来检查触发器是否被激活,如列表B所示。

mysql SHOW TRIGGERS\G

*************************** 1. row ***************************

?Trigger: t1

?Event: INSERT

?Table: data

Statement: UPDATE chars SET count = count + CHAR_LENGTH(NEW.name)

Timing: AFTER

?Created: NULL

ql_mode:

1 row in set (0.01 sec)

列表B

激活触发器后,开始对它进行测试。试着在data表格中插入几个记录:

mysql INSERT INTO data (name) VALUES ('Sue'), ('Jane');

Query OK, 2 rows affected (0.00 sec)

Records: 2?Duplicates: 0?Warnings: 0

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

mysql SELECT * FROM chars;

+-------+

| count |

+-------+

| 7|

+-------+

1 row in set (0.00 sec)

data表格中的INSERT命令激活触发器,计算插入记录的字符数,并将结果存储在chars表格中。如果往data表格中增加另外的记录,chars.count值也会相应增加。

触发器应用完毕后,可有DROP TRIGGER命令轻松删除它。

mysql DROP TRIGGER t1;

Query OK, 0 rows affected (0.00 sec)

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

现在,要建立一个审计记录来追踪对这个表格所做的改变。这个记录将反映表格的每项改变,并向用户说明由谁做出改变以及改变的时间。需要建立一个新表格来存储这一信息(表格名:audit),如下所示。(列表C)

mysql CREATE TABLE audit (id INT(7), balance FLOAT, user VARCHAR(50)

NOT NULL, time TIMESTAMP NOT NULL);

Query OK, 0 rows affected (0.09 sec)

列表C

接下来,我将在accounts表格中定义一个触发器。(列表D)

mysql CREATE TRIGGER t1 AFTER UPDATEON accounts

FOR EACH ROW INSERT INTO audit (id, balance, user, time)

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

Query OK, 0 rows affected (0.04 sec)

列表D

要是已经走到这一步,就很容易理解。accounts表格每经历一次UPDATE,触发器插入(INSERT)对应记录的id、新的余额、当前时间和登录audit表格的用户的名称。

实现中的例子:用触发器审计记录

既然了触发器的基本原理,来看一个稍稍复杂的例子。常用触发器来建立一个自动“审计记录”,以记录各种用户对数据库的更改。为了解审计记录的实际应用,请看下面的表格(表格名:accounts),它列出了一个用户的三个银行账户余额。(表A)

mysql SELECT * FROM accounts;

+----+------------+---------+

| id | label| balance |

+----+------------+---------+

|1 | Savings #1 |500 |

|2 | Current #1 |2000 |

|3 | Current #2 |3500 |

+----+------------+---------+

3 rows in set (0.00 sec)

表A

然后,检查触发器是否被激活:

mysql SHOW TRIGGERS \G

*************************** 1. row ***************************

?Trigger: t1

?Event: UPDATE

?Table: accounts

Statement: INSERT INTO audit (id, balance, user, time)

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

Timing: AFTER

?Created: NULL

Sql_mode:

1 row in set (0.01 sec)

再来看最后的结果(列表E):

mysql UPDATE accounts SET balance = 500 WHERE id = 1;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1?Changed: 1?Warnings: 0

mysql UPDATE accounts SET balance = 900 WHERE id = 3;

Query OK, 1 row affected (0.01 sec)

Rows matched: 1?Changed: 1?Warnings: 0

mysql UPDATE accounts SET balance = 1900 WHERE id = 1;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1?Changed: 1?Warnings: 0

列表E

注意,对accounts表格所作的改变已被记录到audit表格中,将来如果出现问题,可以方便地从中进行恢复。

mysql SELECT * FROM audit;

+------+---------+----------------+---------------------+

| id| balance | user| time|

+------+---------+----------------+---------------------+

|1 |500 | root@localhost | 2006-04-22 12:52:15 |

|3 |900 | root@localhost | 2006-04-22 12:53:15 |

|1 |1900 | root@localhost | 2006-04-22 12:53:23 |

+------+---------+----------------+---------------------+

3 rows in set (0.00 sec)


新闻标题:Mysql触发器怎么验证 mysql触发器详解
文章转载:http://cdweb.net/article/hghggg.html