MySQL触发器的作用及创建/删除。

  1. 什么是触发器?
    当某条SQL语句发生时,自动执行某些其他的SQL语句的时候就需要使用到触发器。触发器只能响应:DELETE,INSERT,UPDATE这三个特定操作。

  2. 创建触发器?
    创建触发器时需要给出最重要的四条信息:1.全局唯一的触发器名;2.触发器关联的表;3.触发器在何时执行(操作执行之前或者之后)4.触发器应该响应的活动(DELETE, INSERT或者UPDATE);
    由于触发器只能响应特定的三种类型的操作,因此可创建的触发器也就三种类型:INSERT触发器,DELETE触发器以及UPDATE触发器。

创建触发器

在执行INSERT触发器时,也这样几点需要注意:1.在INSERT触发器代码内,可以引用一个名为NEW的虚拟表,可以用NEW来访问刚插入的行数据;2.在BEFORE INSERT触发器中,NEW中的值可以被更新;3.对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自定生成值。

创建一个INSERT触发器,每次插入一行数据,每次会返回当前插入的行数据的id。

 /*创建触发器*/
 CREATE TRIGGER insertcustomers AFTER INSERT ON customers
 FOR EACH ROW SELECT NEW.cust_id INTO @newinsertid;
 
 /*执行触发器*/
 INSERT INTO customers (cust_name,item_price,item_quantity) VALUES ('2',5,18);
 SELECT @newinsertid;

有这样一些细节:

  1. 使用CREATE TRIGGER来创建触发器;

  2. AFTER INSERT表明在插入行数据之后,触发器才会执行特征操作;

  3. FOR EACH ROW 表示对插入的每一行数据,触发器都起作用;

  4. 针对INSERT触发器,可以使用虚拟表NEW,来使用刚插入的行数据。比如例子中,SELECT NEW.cust_id INTO @newinsertid表示将新插入的行数据的id赋值给变量@newinsertid;

删除触发器

DELETE触发器在DELETE语句执行之前或者之后,需要知道以下两点:

  1. 在DELETE触发器代码内,可以引用一个名为OLD的虚拟表,来访问被删除的行;

  2. OLD表中的数据只能读,不能被更新,而在INSERT触发器中,就可以通过NEW来更新被插入的行数据;

例如,针对customers表,当删除一行数据时,返回被删除数据的cust_id以及cust_name:

 /*创建DELETE触发器*/
 
 DELIMITER // CREATE TRIGGER insertcustomers AFTER DELETE ON customers
 FOR EACH ROW 
 BEGIN 
   SELECT OLD.cust_name INTO @deletecustname;
   SELECT OLD.cust_id INTO @deletecustid;
 END // 
 /*调用DELETE触发器*/
 DELETE FROM customers WHERE cust_id = 3;
 SELECT @deletecustname;
 SELECT @deletecustid;

基本上与创建INSERT触发器一样,只不过在DELETE触发器中只能使用OLD来访问被删除的行数据。

修改触发器

UPDATE触发器在UPDATE语句执行之前或者之后执行,需要知道一下几点:

  1. 在BEFORE UPDATE触发器中可以使用NEW和OLD来访问数据,而在AFTER UPDATE触发器中使用NEW来访问数据会报错,只能使用OLD来访问数据;

  2. 在BEFORE UPDATE触发器中,NEW中的值可以被改变,即允许更改将用于UPDATE的数据;

  3. OLD中的行数据只能读,不能被更新;

一个UPDATE触发器示例如下:

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java