怎么在mysql中创建一个触发器

  介绍

本篇文章为大家展示了怎么在mysql中创建一个触发器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

我们可以可以使用创建触发语句创建一个新的触发器,来看下具体的语法:

CREATE  TRIGGER  trigger_name  trigger_time  trigger_event   提醒table_name   ,FOR  EACH 行   ,开始   ,……   ,,

然后我们来详细看下上述sql的具体含义:

<李>

将触发器名称放在创建触发语句之后,触发器名称应遵循命名约定(触发时间)_(表名称)_(触发事件),例如before_employees_update。

<李>

触发激活时间可以在之前或之后,必须指定定义触发器的激活时间。如果要在更改之前处理操作,则使用之前关键字,如果在更改后需要处理操作,则使用后关键字。

<李>

触发事件可以是插入、更新或删除。此事件导致触发器被调用。触发器只能由一个事件调用。要定义由多个事件调用的触发器,必须定义多个触发器,每个事件一个触发器。

<李>

触发器必须与特定表关联。没有表触发器将不存在,所以必须在在关键字之后指定表名。

<李>

将sql语句放在开始和结束块之间。这是定义触发器逻辑的位置。

大概了解了之后,我们就来尝试创建触发器来记录员工表中行数据的更改情况,先来看下这个表的结构:

mysql>, DESC 员工;   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + +   |,Field ,,,, |, Type ,,,, |, Null  |, Key  |, Default  | Extra  |   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + +   | |,employeeNumber  int (11),,, |, NO , |, PRI  |, NULL , |,,, |   |,lastName ,,, |, varchar (50), |, NO , |,,, |, NULL , |,,, |   |,firstName ,, |, varchar (50), |, NO , |,,, |, NULL , |,,, |   |,extension ,, |, varchar (10), |, NO , |,,, |, NULL , |,,, |   |,email ,,,, |, varchar (100), |, NO , |,,, |, NULL , |,,, |   |,officeCode ,, |, varchar (10), |, NO , |, MUL  |, NULL , |,,, |   |,reportsTo ,, |, int (11),,, |, YES  |, MUL  |, NULL , |,,, |   |,jobTitle ,,, |, varchar (50), |, NO , |,,, |, NULL , |,,, |   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + +   8,rows 拷贝设置

我们再来创建一个名员工为审计的新表,用来保存员工表中数据的更改:

CREATE  TABLE  employees_audit  (   id 才能INT  AUTO_INCREMENT  PRIMARY 键,   employeeNumber 才能;INT  NOT 空,   lastname 才能;VARCHAR (50), NOT 空,   changedat 才能;DATETIME  DEFAULT 空,   action 才能;VARCHAR (50), DEFAULT  NULL   );

再来创建一个之前更新触发器,该触发器在对员工表中的行记录更改之前被调用:

DELIMITER  $ $   CREATE  TRIGGER  before_employee_update    BEFORE 才能;UPDATE 提醒员工   FOR 才能;EACH  ROW    开始   INSERT 才能;INTO  employees_audit   SET 才能;action =, & # 39;更新# 39;   ,,employeeNumber =, OLD.employeeNumber,   ,,,lastname =, OLD.lastname,   ,,,changedat =,现在(),,   结束$ $   DELIMITER ;

在上述触发器的主体中,我们使用旧关键字来访问受触发器影响的行的employeeNumber和lastname列。我们要注意的是,在为插入定义的触发器中,可以仅使用新关键字。不能使用旧关键字。但是,在为删除定义的触发器中,没有新行,因此您只能使用旧关键字。在更新触发器中,旧是指更新前的行,而新是更新后的行。

然后,我们可以使用显示触发语句,来查看数据库中的触发器:

mysql>, SHOW 触发器;   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - +   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在mysql中创建一个触发器