1. 一个简单的例子

1.1. 创建表:

create table t(s1 integer);

1.2. 触发器:

delimiter |
create trigger t_trigger before insert on for each row
begin set @x = "hello trigger";
       set NEW.s1 = 55;
end;
|

1.3. 如果触发器创建错误,可能只能删除了,至少我试过不能replace

drop trigger t_trigger;

1.4. 当执行insert 时:

insert into t values(1);

1.5. 会执行触发器t_trigger

select @x,t.* from t;

1.6. 可以看到结果:

1.7可以使用 SHOW TRIGGERS; 查看新建的触发器

2. url查询哈希值的维护 触发器

2.1 创建表 pseudohash。

2.2 创建触发器,当对表进行插入和更新时,触发 触发器

delimiter |
create trigger pseudohash_crc_ins before insert on pseudohash for each row
begin set @x = "hello trigger";
set NEW.url_crc=crc32(NEW.url);
end;
|
create trigger pseudohash_crc_upd before update on pseudohash for each row
begin set @x = "hello trigger";
set NEW.url_crc=crc32(NEW.url);
end;
| delimiter ;

  2.3 插入操作

insert into pseudohash(url) values("http://www.baidu.com");

insert into pseudohash(url) values("http://www.163.com");

2.4 查看表中数据(是进行更新操作之后的数据)

2.5 更新

update pseudohash set url = 'www.163.com' where id = 1;

可以看到的是,插入和更新操作后,他们的 url_crc是不同的

----------------------------------------------------------------------------

2.6  上面源于一个 对于url建立索引的例子,还有一种建立索引的方式: 在B+ 树上建立一个伪索引,和真正的索引不同,它还是在B+树 索引上进行查找,但是,使用的是 键的哈希值进行查找,而不是键本身,这样会加快查找

2.6.1 创建urls 表,注意使用的是 memory存储引擎

CREATE TABLE `urls` (
`url` varchar(255) DEFAULT NULL,
`url_crc` int(11) DEFAULT '0',
KEY `url` (`url`) USING HASH
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

     2.6.2 然后插入url和url_crc,例如

insert into urls values('www.gougou.com',crc32('www.gougou.com'));

像上面的那样,或者使用触发器

2.6.3 然后查询的时候使用 hash索引查询

select * from urls where url = "www.baidu.com" and url_crc = crc32("www.baidu.com");

select * from urls where url_crc = crc32("www.baidu.com");

select * from urls where url = "www.baidu.com"

上面3个查询结果当然是一样的,但是速度上hash的快很多

3. 触发器 语法

3.1  CREATE TRIGGER trigger_name trigger_time trigger_event

              ON tbl_name FOR EACH ROW trigger_stmt

trigger_time是触发程序的动作时间。它可以是BEFORE或AFTERtrigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:

·             INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。
· UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。
· DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。
      3.2 可能遇到的问题

如果你在触发器里面对刚刚插入的数据进行了 insert/update, 会造成循环的调用.

如:

create trigger test before update on test for each row update test set NEW.updateTime = NOW() where id=NEW.ID; END

应该使用set:

create trigger test before update on test for each row set NEW.updateTime = NOW(); END

3.3 触发器 与存储过程

触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL

       (允许存储程序通过参数将数据返回触发程序)。 

而存储过程  可以接受参数,将结果范围给应用程序

mysql 触发器学习的更多相关文章

  1. 一篇很棒的 MySQL 触发器学习教程

    一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...

  2. MySQL触发器学习总结

    1.What     触发器是MySQL响应DELETE,INSERT,UPDATE语句前后而自动执行的一条MySQL语句 2.Why(使用情形)     增加一个订单对应库存-1     删除一行在 ...

  3. MYSQL触发器学习笔记

    课程学至金色晨曦科技公司技术总监沙利穆 触发器 1.       什么是触发器 触发器是一种特殊类型的存储过程,不由用户直接调用.创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执 ...

  4. MySQL触发器学习

    简介 MySQL从5.0.2版本开始支持触发器的功能.触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合. 创建触发器 语法: CREATE TRIGGER trigge ...

  5. MySQL 触发器学习-markdown->html 格式测试

    <!doctype html>触发器 figure:first-child { margin-top: -20px; } #write ol, #write ul { position: ...

  6. mysql 触发器学习(可以将mysql数据同步到redis)

    1. 一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: delimiter | create trigger t_trigger befo ...

  7. mysql触发器 学习

    1.       说明: 触发器的定义就是说某个条件成立的时候,你触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好 ...

  8. 关于mysql触发器和存储过程的理解

    内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...

  9. MYSQL进阶学习笔记七:MySQL触发器的创建,应用及管理!(视频序号:进阶_16,17)

    知识点八:MySQL触发器的应用(16,17) 触发器的定义: 什么是触发器: 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据是触发执行,他比数据库本身标准的功能有更精细和更复杂的数据 ...

随机推荐

  1. ios中的关键词retain release

    内存分析  在函数中只要用new  alloc  copy  这样的分配空间时 则计算器retain就要为一 每调用一次就要加一 在.m文件中引用手动计数时 一定要调用[super dealloc]这 ...

  2. 修改一个Label上字体的大小(富文本)

    假如修改上面的Label上价格30000的大小,那么需要用到富文本 上代码 // 字符串30000 NSString * priceNumber = @"30000"; [pric ...

  3. html 时间单位

    <style>h1{font-size:16px;} .test{position:absolute;left:8px;width:200px;height:100px;margin:0 ...

  4. Ubuntu 14.04 Nvidia显卡驱动手动安装及设置

      更换主板修复grub 引导后,无法从Nvidia进入系统(光标闪烁), 可能是显卡驱动出了问题. 1. 进入BIOS设置, 从集成显卡进入系统 将显示器连接到集显的VGI口, 并在BIOS中设置用 ...

  5. build path contains duplicate entry:'src' for project 'XXX'

    解决了,原因是编译器配置不正确,原工程使用adk8/android2.3,我用的是最新的4.0,改了下编译环境就好了.

  6. 使用onclick跳转到其他页面。使用button跳转到指定url

    1. onclick="javascript:window.location.href='aa.htm'" 2.  onclick="location='URL'&quo ...

  7. 查看端口号他所占用的exe应用程序

  8. php 执行效率

    用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中 ...

  9. HDU1233--还是畅通工程(最小生成树)

    Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直 ...

  10. CC_CALLBACK之间的区别

    #define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_A ...