环境情况:

表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. openwrt makefile选项

    Package/conffiles (optional) 由该包安装的配置文件的列表,一行一个文件. BuildPackage宏 最重要的一个宏是 BuildPackage.它会在 Makefile ...

  2. servlet第2讲(下集)----创建servlet实例(继承GenericServlet)

  3. crossdomain 可用

    <cross-domain-policy> <allow-access-from domain="*"/> <allow-http-request-h ...

  4. linux压缩和解压缩命令

    压缩:tar -zcvf 名称.tar.gz 文件夹 解压:tar -zxvf 包名.tar.gz 解压路径

  5. Zabbix3.0 客户端搭建

    zabbix客户端安装 我们这边使用编译安装 软件包版本 zabbix-3.0.3.tar.gz 添加用户组 #groupadd zabbix #useradd -s /sbin/nologin -g ...

  6. DB9 公头母头引脚定义及连接、封装

    DB9 公头母头引脚定义及连接.封装 转自:http://blog.csdn.net/yangshuodianzi/article/details/8997478 1.实物及引脚简介 在做开发的时候经 ...

  7. 无线手柄+步进电机——控制方向

    今天测试了一下无线手柄控制电机转向的改变 1: #include <PS2X_lib.h> //for v1.6 2: #include <Stepper.h> 3:  4: ...

  8. Java NIO的探究

    1.Java NIO与阻塞IO的区别 阻塞IO通信模型(在上一篇<J2SE网络编程之 TCP与UDP>博客中有所介绍) 我们知道阻塞I/O在调用InputStream.read()方法时是 ...

  9. C++:new 和 delete

    在 C++ 中 , 使用 new 操作符动态申请内存的时候,如果申请失败,则会抛出  bad_alloc异常 当使用  delete 释放一块内存的时候 , 有些编译器上delete 不能判断一块内存 ...

  10. jsp导入外部样式

    在博客园遇到一位朋友,她将我的代码下载下去,运行的时候,jsp页面的样式不存在,不会显示出来. 这里就将我之前写的SpringSpringmvcMybatis做一些修改. jdk1.8 加入了两个ja ...