mysql触发器

触发器:

触发器被定义为党表被修改时产生动作的对象。触发器可以用于insert、update和delete语句。举个例子,你可以在将值插入表中之前做检查,或者指定哪些行从表中删除时应当被记入另一个数据变化日志中。触发器对于自动化记录被监控表的变化更新是很有用处的。

 

举个具体的实例,mysql数据库中创建如下数据库和表

create database if not exists `test`;

use test;

#被监控的数据表

create table IF NOT EXISTS  `test`.`auction`

(

         `id`int unsigned not null auto_increment,

         `ts`timestamp,

         `item`varchar(30) not null,

         `bid`decimal(10,2) not null,

         primarykey (id)       

);

#表auction数据有更新时记录到auction_log表中

create table if not exists`test`.`auction_log`

(

         actionenum('create', 'update', 'delete'),

         `id`int unsigned not null,

         `ts`timestamp,

         `item`varchar(30) not null,

         `bid`decimal(10,2) not null,

         index(id)

);

备注:mysql数据库默认是不对table赋予trigger权限的,建议手动给需要被监控管理的数据表给用户赋予trigger权限。操作如下:

#GRANT trigger ON databasename.tablename TO‘username’@’%’;

去掉相应权限使用REVOKE关键字操作

接着,我们定义表auction的相关trigger触发器,如下操作:

drop trigger if exists`test`.`insert_auction`;

create trigger insert_auction after inserton `test`.`auction` for each row

insert into `test`.`auction_log` (action,id, ts, item, bid) values('create', new.id, now(), new.item, new.bid);

 

drop trigger if exists`test`.`update_auction`;

create trigger update_auction after updateon `test`.`auction` for each row

insert into `test`.`auction_log`(action,id, ts, item, bid) values('update', new.id, now(), new.item, new.bid);

 

drop trigger if exists`test`.`delete_auction`;

create trigger delete_auction after deleteon `test`.`auction` for each row

insert into `test`.`auction_log`(action,id, ts, item, bid) values('delete', old.id, now(), old.item, old.bid);

备注:触发器编写的格式如下:

DELIMITER $$

CREATE TRIGGER  triggername BEFORE|AFTER  insert|update|deleteON tablename for each row

BEGIN

         SQL操作块;

END;$$

DELIMITER;

若是只有一条SQL操作的trigger,则可以精简如下

CREATE TRIGGER triggername BEFORE|AFTERinsert|update|delete ON tablename for each row

Sql操作语句;

删除触发器,使用drop trigger triggername即可。

在MYSQL Workbench上执行触发器以后,管理视图变化如下:

mysql触发器_第1张图片

分别对auction表插入、更新和删除数据操作

insert into `test`.`auction`(item, bid) values('chintzpillows', 10.00);

update `test`.`auction` set bid=30 whereid=1;

delete from `test`.`auction` where id=1;

查询auction_log表可见如下内容:

select * from `test`.`auction_log`;

mysql触发器_第2张图片


你可能感兴趣的:(读书笔记,mysql,触发器)