本篇文章为大家展示了怎么在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中创建一个触发器