教学之友,学习之友。

站长教学网

当前位置: 站长教学网 > 数据库 > MYSQL教程 >

Mysql触发器介绍

时间:2013-03-26 17:27来源:未知 作者:ken 点击:

语法:

CREATE TRIGGER <触发器名称>  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
{ BEFORE | AFTER }  --触发器有执行的时间设置:可以设置为事件发生前或后。
{ INSERT | UPDATE | DELETE }  --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。
ON <表名称>  --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW  --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句>  --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。

--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。

例子1:
创建两个表tab1和tab2
CREATE TABLE IF NOT EXISTS `tab1` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `username` varchar(250) DEFAULT NULL,
  `times` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=18 ;

CREATE TABLE IF NOT EXISTS `tab2` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `username` varchar(250) DEFAULT NULL,
  `times` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=18 ;

创建触发器:t_insert_on_tab2

作用:增加tab1表记录后自动将记录增加到tab2表中


 

DROP TRIGGER IF EXISTS t_insert_on_tab2;
CREATE TRIGGER t_insert_on_tab2
AFTER INSERT ON tab1
FOR EACH ROW
BEGIN
     insert into tab2(username) values(NEW.username);
END;


测试一下:

INSERT INTO tab1(tab1_id) values('0001');
查看两个表:
SELECT * FROM tab1;
SELECT * FROM tab2;

例子2:教学网 eduyo.com

创建触发器:t_afterdelete_on_tab1

作用:删除tab1表记录后自动将tab2表中对应的记录删去


DROP TRIGGER IF EXISTS t_afterdelete_on_tab1;
CREATE TRIGGER t_afterdelete_on_tab1
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
      delete from tab2 where tab2_id=OLD.id;
END;

测试一下

DELETE FROM tab1 WHERE id='0001';
看看结果
SELECT * FROM tab1;
SELECT * FROM tab2;

 


注:
1、 使用别名OLDNEW,能够引用与触发程序相关的表中的列。OLD.id在更新或删除它之前,引用已有行中的1列,是否可以引
用old与trigger_time无关,NEW.username在更新它之后引用将要插入的新行的1列或已有行的1列。
INSERT:只可引用NEW、DELETE:只可引用OLD、 UPDATE:可以引用NEW或OLD。
2、激活触发程序时,对于触发程序引用的所有OLD和NEW列,需要具有SELECT权限,对于作为SET赋值目标的所有NEW列, 需要具
有UPDATE权限。
3、CREATE TRIGGER语句需要SUPER权限。
4、show   triggers\G   显示数据库中所有触发器。
5、对于具有相同触发程序动作时间和事件的给定表,不能有两个触发程序。
6、触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL
7、触发程序不能使用以显式或隐式方式开始或结束事务的语句,如START TRANSACTION、COMMIT或ROLLBACK。
DROP TRIGGER [schema_name.]trigger_name

(责任编辑:ken)
TAG标签: mysql 触发器
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容