006_深入浅出mysql—触发器

来源:互联网 发布:武极天下神迹进阶数据 编辑:程序博客网 时间:2024/05/29 11:42

触发器是与表相关的数据库对象,在满足定义条件的时候触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。

创建

CTEATE TRIGGER trigger_name trigger_time, trigger_eventON tb_name FOR EACH ROW trigger_stmt;释:trigger_time:触发时间,可以是BEFORE(检查约束前触发)或者是AFTER(检查约束后触发)trigger_event:触发时间,可以是INSERTUPDATE或者DELETE

备注:触发器只能创建在永久表上 

对同一个表相同触发时间的触发事件,只能定义一个触发器。使用别名OLD和NEW来引用触发器中发生的记录内容。
示例:

mysql> delimiter $$mysql> create trigger ins_film after insert     -> on film for each row    ->     begin    ->         insert into film_text(film_id, title, description)    ->         values (new.film_id, new.title, new.description);    ->     end;    -> $$Query OK, 0 rows affected (0.00 sec)mysql> mysql> delimiter ; mysql> mysql> insert into film values(1001, 'a', 'abc');Query OK, 1 row affected (0.00 sec)mysql> select * from film;+---------+-------+-------------+| film_id | title | description |+---------+-------+-------------+|    1001 | a     | abc         |+---------+-------+-------------+1 row in set (0.01 sec)mysql> select * from film_text;+---------+-------+-------------+| film_id | title | description |+---------+-------+-------------+|    1001 | a     | abc         |+---------+-------+-------------+1 row in set (0.01 sec)

可以看出插入film的同时,回向film_text插入相应的记录。

删除触发器

 DROP TRIGGER [schema.]trigger_name;

查看触发器

show triggers \Gselect * from information_schema.triggers;

触发器的使用

触发器执行语句,有下面两个限制:

  • 触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL语句,但是允许存储程序通过参数将参数返回触发程序。
  • 不能在触发器中使用显示以显式或隐式方式开始或结束事务的语句,如ACTION、COMMIT或ROLLBACK。

MySQL的触发器是按照BEFORE触发操作、行操作、AFTER触发器的顺序执行的,其中任何一步操作发生错误都不会执行剩下的操作。如果是事务操作,整个作为一个事务回滚;如果是非事务表,已插入的无法回滚。

0 0
原创粉丝点击