mysql之触发器的使用

通过使用一些数据库管理软件,可以大大方便对数据库的操作,本文使用的数据库管理软件是navicat。
首先进入到命令行模式,方法为:在需要操作的数据库名处右键,然后选择“命令列界面”。

1、在创建触发器之前,我们先来普及一下什么是触发器,以下内容,百度即可查到。
(1)触发器的概念:
         触发器英文名trigger,是指数据库中为响应一个特殊表格中的某些事件而自动执行的程序代码。
         
        触发器是数据库中由一个时间触发的特殊的存储过程,他不是由程序条用也不是手工启动的。触发器的执行可以由对一个表的
  insert,delete, update等操作来触发,触发器经常用于加强数据的完整性约束和业务规则等等。

(2)为什么要使用触发器:
         触发器通常在进行登录或者对表作修改时触发,可以作为登录验证或者数据监控。换句话说,触发器是用来管理数据库的,很少用来          
   操作数据。比如,我要知道谁在什么时候修改了Test表,修改了什么,就要使用触发器了。

2、OK,接下来就是激动人心的创建触发器的时刻了,为了便于理解,下面以具体的实例进行讲解。
我的数据库名称为database,在我的数据库里有两张表,表名分别是location和device_status,
location表的字段分别是
id,username,domain,last_modified,remark
device_status表的字段分别是
id,status,init_time,online,update_time

希望通过触发器达到的效果是:
当location表的数据有变动(添加、删除)时,device_status表的内容也会自动进行修改,具体修改内容是:
当location表进行了insert操作时,device_status表的id=username,init_time=last_modified,online=1
当location表进行了delete操作时,device_status表的id=username,update_time=last_modified,online=0

OK,不再啰嗦,下面直接上sql语句:
mysql> delimiter $                          //设置以$作为sql语句的结束符

然后执行下面的语句,每行写完之后按回车(没什么作用,只是为了让语句看起来清晰整洁)

mysql> create trigger triggeronline
    -> after insert on location
    -> for each row
    -> begin
    -> replace into gateway_status(id,online,init_time) values(new.username,1,new.last_modified);
    -> end$
Query OK, 0 rows affected

正常的话,在输入“end$”并按下回车后,会出现“Query OK, 0 rows affected”这句话,说明操作成功。
然后继续创建第二个触发器,在此提一下,对于同一张表,可以创建多个触发器,当然不是越多越好,根据实际情况来定。

mysql> create trigger triggeroffline
        -> after delete on location
        -> for each row
        -> begin
        -> replace into gateway_status(id,online,update_time) values(old.username,0,old.last_modified);
        -> end$
Query OK, 0 rows affected

注释:(1)两段sql语句中的new和old的意思分别是:当insert一条新的数据的时候,要想取该条数据的某个字段的值,就用new.字段
                   名;当 delete一条数据的时候,若想获取这条被删除的数据的某个字段的值,则使用old.字段名。
           (2) replace into:
                   该语句执行之前,首先需要设置某个字段为唯一索引,比如你希望当数据发生变化的时候,更改的是gateway_status中除了 
                   id字段之外的其他字段的内容,那么你就需要把id设置为唯一索引,对应的sql语句为:
                   ALTER TABLE  table_name  ADD UNIQUE (id)

                   replace into语句的作用是,首先会判断对应的id是否存在,存在就替换其名字和性别,否则就插入整行。

OK,到此为止,两个触发器triggeronline和triggeroffline已创建完毕,下面可以对location表进行insert和delete操作,通过查看device_status表的字段是否发生变化来验证你的触发器是否创建成功。

注:虽然触发器功能强大,轻松可靠地实现许多复杂的功能,但是要慎用,因为过多的触发器会造成数据库以及应用程序的维护困难,同时对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。

相关链接:
                 mysql创建唯一索引: http://blog.csdn.net/wocjj/article/details/7415223
                 数据库触发器:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值