环境情况:

表1:residential_building,住宅楼表:id,community(所属社区),countFloor(楼层数),countUnit(单元数),countHomesInUnit(每单元户数),buildingName(楼栋名称)

表2:homeNumber,住户表 id,buildingID(表1的id),homeNumber

根据表1楼栋信息,自动填充表2中每个房间号的内容

创建表1:

drop table if exists residential_building;
create table residential_building(
id int not null auto_increment primary key,
community varchar(20),
countFloor tinyint,
countUnit tinyint,
countHomesInUnit tinyint,
buildingName varchar(50)
)character set utf8;

创建表2:

drop table if exists building_home;
create table building_home(
id int not null auto_increment primary key,
buildingID int,
homeNumber varchar(50)
)character set utf8;

insert触发器,表一插入内容时,表2根据楼层单元信息生成房间号

DROP TRIGGER IF EXISTS createHomeNumber;
delimiter $$
create trigger createHomeName after insert on residential_building
for each row
begin
declare floor int default 1;
declare num int default 1;
declare roomNumber varchar(50) CHARACTER SET utf8 default "";
while floor <= new.countFloor do
while num <= new.countUnit * new.countHomesInUnit do
if num<10 then
set roomNumber = concat(new.buildingName,floor,"0",num);
else
set roomNumber = concat(new.buildingName,floor,num);
end if; insert into building_home (buildingID,homeNumber) values(new.id,roomNumber);
set num = num + 1;
end while;
set floor = floor + 1;
set num = 1;
end while;
end
$$
delimiter ;

del触发器,当表一中楼栋被删除时,表2相应记录被删除

DROP TRIGGER IF EXISTS delHomeNumber;
delimiter $$
create trigger delHomeNumber after delete on residential_building
for each row
begin
delete from building_home where buildingID = old.id;
end
$$
delimiter ;

update 触发器,当表1中楼栋信息被修改时,表2重新创建

DROP TRIGGER IF EXISTS updateRoomNumber;
delimiter $$
create trigger updateRoomNumber after update on residential_building
for each row
begin declare floor int default 1;
declare num int default 1;
declare roomNumber varchar(50) CHARACTER SET utf8 default "";
delete from building_home where buildingID = old.id;
while floor <= new.countFloor do
while num <= new.countUnit * new.countHomesInUnit do
if num<10 then
set roomNumber = concat(new.buildingName,floor,"0",num);
else
set roomNumber = concat(new.buildingName,floor,num);
end if; insert into building_home (buildingID,homeNumber) values(old.id,roomNumber);
set num = num + 1;
end while;
set floor = floor + 1;
set num = 1;
end while;
end
$$
delimiter ;

mysql触发器的使用的更多相关文章

  1. MySQL触发器如何正确使用

    MySQL触发器如何正确使用 2010-05-18 15:58 佚名 博客园 字号:T | T 我们今天主要向大家介绍的是MySQL触发器进行正确使用,其中包括对MySQL触发器发器的语句创建,触发时 ...

  2. 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)

    1   引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...

  3. redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)

    一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...

  4. mysql触发器的例子--插入前更新数据

    本文介绍下,一个mysql触发器的例子,在数据插入前更新相关内容,有需要的朋友参考下. mysql触发器的例子,如下: view source print? 001 mysql> CREATE  ...

  5. mysql触发器的作用及语法

    触发器是一种特殊的存储过程,它在插入,删除或改动特定表中的数据时触发运行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有下面的作用: 1.安全性.能够基于数据库的值使用户具有 ...

  6. MySQL 触发器结构及三个案例demo

    --你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了.这跟SQL的标准有所不同. CREATE TRIGGER语法 CREATE TRIGG ...

  7. 利用MySQL触发器实现check和assertion

    MySQL虽然输入check语句不会报错,但是实际上并没有check的功能.但是MySQL 依然可以利用触发器来实现相应功能. 本文将根据两个例子简要阐述MySQL实现check和assertion的 ...

  8. 猎八哥浅谈MYSQL触发器

    什么是MYSQL触发器,我们先了解一下触发的意思.触发的字面意思是指因触动而激发起某种反应. MYSQL必知必会中对触发器的解释是:MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于 B ...

  9. MYSQL触发器在PHP项目中用来做信息备份、恢复和清空

    案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...

  10. MySQL触发器在PHP项目中用来做信息备份、恢复和清空的方法介绍

    案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...

随机推荐

  1. hdu_5748_Bellovin(LIS)

    题目链接:hdu_5748_Bellovin 题意: 给你一个数列ai,设f(a1,a2,a3,..an)=(f1,f2,f3,...,fn),其中fi表示以ai结尾的最长递增子序列长度,注意:必须要 ...

  2. hdu_5274_Dylans loves tree(树剖)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5274 题意:给一棵树和叶子的值,然后有单点修改操作和询问区间操作,询问的是每一个值出现的奇偶次数,如果 ...

  3. mib.c

    函数 sprint_realloc_by_type  (E:\code\net-snmp-5.4.2.1\snmplib\mib.c)的主要作用是: 解析传入的mib中的节点,根据mib节点类型,将其 ...

  4. 第4章 流程控制----编写Java程序,使用while循环语句计算1+1/2!+1/3!+...+1/20!之和

    package four; public class fouronetwo { public static void main(String args[]){ double sum = 0,a = 1 ...

  5. apache: 503

    Any connection over Max, will get a 503 Service Temporarily Unavailable. 503出现的场景:压测url时,发现大量的503错误. ...

  6. KMP算法中的next数组求解示意图

  7. SpringMVC redirect乱码问题

    转:http://blog.csdn.net/xubo_zhang/article/details/8239725 spring redirect 用spring redirect中文会乱码:如下示例 ...

  8. wpf之数据触发器DataTrigger

    wpf, 根据绑定的属性的值的不同(数据分类),界面上显示不同的控件(绑定不同类型的属性),可以使用数据库触发器DataTrigger实现这一功能. 实现的效果如下: 首先建立实体类: 更改通知类: ...

  9. 转 使用SQL从AWR收集数据库性能变化趋势

    使用SQL从AWR收集数据库性能变化趋势 为了对数据库一段时间的性能情况有个全面了解,显然AWR是一个非常有用的工具, 但很多人只会在数据库有性能问题时才会生成问题时段的awr报告去分析.虽然AWR ...

  10. MyBatis中Like语句使用方式

    oracle数据库: SELECT * FROM user WHERE name like CONCAT('%',#{name},'%') 或 SELECT * FROM user WHERE nam ...