mysql 触发器学习(可以将mysql数据同步到redis)
1. 一个简单的例子
1.1. 创建表:
create table t(s1 integer);
1.2. 触发器:
delimiter | create trigger t_trigger before insert on t 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 触发器学习(可以将mysql数据同步到redis)的更多相关文章
- Redis和MySQL数据同步及Redis使用场景
1.同步MySQL数据到Redis (1) 在redis数据库设置缓存时间,当该条数据缓存时间过期之后自动释放,去数据库进行重新查询,但这样的话,我们放在缓存中的数据对数据的一致性要求不是很高才能放入 ...
- 一篇很棒的 MySQL 触发器学习教程
一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...
- MySQL触发器学习总结
1.What 触发器是MySQL响应DELETE,INSERT,UPDATE语句前后而自动执行的一条MySQL语句 2.Why(使用情形) 增加一个订单对应库存-1 删除一行在 ...
- MYSQL初级学习笔记二:数据表相关操作及MySQL存储引擎!(视频序号:初级_5,7-22|6)
知识点三:数据表相关操作(5,7-22) --------------------------------整型--------------------------------- --测试整型 CREA ...
- 【转】MYSQL入门学习之七:MYSQL常用函数
转载地址:http://www.2cto.com/database/201212/175864.html 一.数学函数 www.2cto.com ABS(x) ...
- MYSQL触发器学习笔记
课程学至金色晨曦科技公司技术总监沙利穆 触发器 1. 什么是触发器 触发器是一种特殊类型的存储过程,不由用户直接调用.创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执 ...
- MySQL触发器学习
简介 MySQL从5.0.2版本开始支持触发器的功能.触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合. 创建触发器 语法: CREATE TRIGGER trigge ...
- MySQL 触发器学习-markdown->html 格式测试
<!doctype html>触发器 figure:first-child { margin-top: -20px; } #write ol, #write ul { position: ...
- MySQL 触发器例子(两张表同步增加和删除)
以下两个例子来自:http://www.cnblogs.com/nicholas_f/archive/2009/09/22/1572050.html实测有效,但是原帖的分隔符不正确,因此稍作修改.其中 ...
随机推荐
- 对vector等STL标准容器的排序操作
[+] STL提供的Sort 算法 所有sort算法介绍 sort 中的比较函数 sort 的稳定性 全排序 局部排序 nth_element 指定元素排序 partition 和stable_par ...
- 《WPF程序设计指南》读书笔记——第7章 Canvas
1.Canvas面板 using System; using System.Windows; using System.Windows.Controls; using System.Windows.M ...
- 二十、mysql mysqldump备份工具
.备份所有数据库 mysqldump -uroot -p --all-database > c:\all.sql 备份所有数据库到c盘下的all,sql文件 .备份某个数据库 mysqldump ...
- nginx配置location [=|~|~*|^~] /uri/ { … }用法
版权声明:https://github.com/wusuopubupt ====== nginx location语法 基本语法:location [=|~|~*|^~] /uri/ { … } = ...
- 1588: [HNOI2002]营业额统计 - BZOJ
Description营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天 ...
- winform访问url传参有返回值
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;usi ...
- Unity3d + NGUI 的多分辨率适配(黑边)
原地址:http://www.2cto.com/kf/201310/250921.html 一.当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率分析报告”) 1.1 iOS设备的分辨率主 ...
- ValueError: Attempted relative import in non-package
执行:python deom/scripts/populate.py ValueError: Attempted relative import in non-package solve:python ...
- 如何在Ubuntu下启动Apache的Rewrite功能
在终端中执行 sudo a2enmod rewrite 指令后,即启用了 Mod_rewrite 模块. 另外,也可以通过将 /etc/apache2/mods-available/rewrite.l ...
- HDU4607+BFS
/* bfs+求树的直径 关键:if k<=maxs+1 直接输出k-1: else: k肯定的是包括最长路.先从最长路的起点出发,再走分支,最后到达最长路的终点. 因此是2*(k-(maxs+ ...