触发器统计记录行数

a表保存记录,b表保存a表当中指定cid的总行数
CREATE TABLE `a` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `cid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;

CREATE TRIGGER `insert_exec` AFTER INSERT ON `a` FOR EACH ROW begin
declare b_id int;
select id into b_id from b where cid = new.cid;
if  b_id  then
update b set num=num+1 where cid=new.cid;
else
insert into b (cid,num) values (new.cid, 1);
end if;
end;

CREATE TRIGGER `delete_exec` BEFORE DELETE ON `a` FOR EACH ROW update b  set num = num - 1 where cid= old.cid;


CREATE TABLE `b` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `cid` int(11) NOT NULL,
  `num` int(11) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;


 

MySQL触发器

1、触发器定义就不说了,既然能看到我这个文章就肯定明白这个定义了。用途也不多说,来看继续向下看吧!
触发器语法:
CREATE TRIGGER <触发器名称> 触发器必须有名字,最多64个字符,可能后面会附有分隔符.
{ BEFORE | AFTER } 触发器有执行的时间设置:可以设置为事件发生前或后。
{ INSERT | UPDATE | DELETE } 同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。

ON <表名称> 触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活.
注意:我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW 触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句> 触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。

Continue reading

Mysql触发器

MySQL触发器

1、 触发器作用

日志跟踪:使用数据库记录apache等日志,可以使用自动插入操作

验证数据:触发器可以验证更新数据库要存入的数据

引用完整:验证数据完整可以使用程序验证,但是触发器也可以搞定

2、 前触发器和后触发器

前触发器和后触发器区别触发器在发生的事件前后关系

3、 创建触发器

语法:

CREATE [DEFINER={USER|CURRENT_USER}]

TRIGGER<trigger name>

{BEFORE|AFTER}

{INSERT|UPDATE|DELETE}

ON<table name>

FOR EACH ROW

<triggered SQL statement>

CREATE TRIGGER语句需要SUPER权限

4、 查看触发器

SHOW TRIGGERS和INFORMATION_SCHEMA可以查看现有的触发器

5、 删除触发器

语法:DROP TRIGGER [IF EXISTS] table_name.trigger_name