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

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

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

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

时间: 2024-11-08 21:39:40

mysql 触发器学习(可以将mysql数据同步到redis)的相关文章

mysql 触发器学习

mysql 触发器学习 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 dro

mysql触发器学习

创建一个触发器 语法: create trigger 触发器名字 create trigger xiaoshou_update_trigger  after update on xiaoshou  for each row  begin  update jiangjin  set xiaoshouer=( select sum(taoshu*danjia)from xiaoshou  where userid=new.userid  and month=new.month) , jiangjin

将mysql中的全国区域表数据转移至Redis数据库

搭建环境: 1.meven工程 2.Spring整合Mybatis框架 3.Spring整合Redis数据库 注:这里的大部分内容只有讲在java中如何使用Redis数据库 一丶引入Redus相关jar包,包括Spring整合Redis的jar包 关于jar包版本问题: 目前我使用的这jar版本是没有出现问题的,但我换了一些版本后出现了报错,所以推荐使用我的jar版本即可 <!--Redis驱动包--> <dependency> <groupId>redis.clien

centos6,mysql 5.5 配置 master \ slave 数据同步备份

数据库A 做为主服务,数据库B做为同步库(注: 两边数据库库必须要一至,要不然会有不断的错误信息出来,改啊改,就是不成功) 1.配置 master vi /etc/my.cnf [mysqld] server-id=1 log-bin=log path binlog-do-db=xxxx //表示只备份xxxx这个库 ,可以配置多个库 binlog-ignore-db=yyy //表示忽略yyy库 注: 如果binlog-do-db,binlog-ignore-db不加会默认备份全部库 重启数据

MySQL 触发器学习-markdown-&gt;html 格式测试

<!doctype html>触发器 figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-width: 100%; vertical-align: middle; } button, input, select, textarea { color: inherit; font-style: inherit; font-variant: inherit;

将mysql数据库中的单个库的数据同步到redis数据库中

实际代码只有一点,其他的为备忘 # -*- coding:utf-8 -*- import MySQLdb import redis class Config: def __init__(self): self.mysql_host = '192.168.44.60' self.mysql_user = 'root' self.mysql_port = 3306 self.mysql_password = '123456' self.mysql_db = 'bamboo' self.mysql_

MySQL 触发器例子(两张表同步增加和删除)

其中old表示tab2(被动触发),new表示tab1(主动触发,外部应用程序在此表里执行insert语句) DROP TABLE IF EXISTS tab1; CREATE TABLE tab1( tab1_id varchar(11) ); DROP TABLE IF EXISTS tab2; CREATE TABLE tab2( tab2_id varchar(11) ); 创建触发器:t_afterinsert_on_tab1 作用:增加tab1表记录后自动将记录增加到tab2表中 d

MySQL函数转储存(当前月数据同步)

1 BEGIN 2 declare a1 int default 0;#第一次循环的循环变量 3 declare a2 int default 0; 4 declare b1 int default 0; 5 declare b2 int default 0; 6 declare c1 int default 0; 7 declare c2 int default 0; 8 declare d1 int default 0; 9 declare d2 int default 0; 10 decl

【转】MYSQL入门学习之五:MYSQL的字符集

转载地址:http://www.2cto.com/database/201212/175541.html MySQL的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation).  www.2cto.com 对于字符集的支持细化到四个层次:服务器(server),数据库(database),数据表(table)和连接(connection). 一.MySQL默认字符集 MySQL对于字符集的指定可以细化到一个数据库,一