mysql触发器的使用
环境情况:
表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触发器的使用的更多相关文章
- MySQL触发器如何正确使用
MySQL触发器如何正确使用 2010-05-18 15:58 佚名 博客园 字号:T | T 我们今天主要向大家介绍的是MySQL触发器进行正确使用,其中包括对MySQL触发器发器的语句创建,触发时 ...
- 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)
1 引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...
- redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)
一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...
- mysql触发器的例子--插入前更新数据
本文介绍下,一个mysql触发器的例子,在数据插入前更新相关内容,有需要的朋友参考下. mysql触发器的例子,如下: view source print? 001 mysql> CREATE ...
- mysql触发器的作用及语法
触发器是一种特殊的存储过程,它在插入,删除或改动特定表中的数据时触发运行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有下面的作用: 1.安全性.能够基于数据库的值使用户具有 ...
- MySQL 触发器结构及三个案例demo
--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了.这跟SQL的标准有所不同. CREATE TRIGGER语法 CREATE TRIGG ...
- 利用MySQL触发器实现check和assertion
MySQL虽然输入check语句不会报错,但是实际上并没有check的功能.但是MySQL 依然可以利用触发器来实现相应功能. 本文将根据两个例子简要阐述MySQL实现check和assertion的 ...
- 猎八哥浅谈MYSQL触发器
什么是MYSQL触发器,我们先了解一下触发的意思.触发的字面意思是指因触动而激发起某种反应. MYSQL必知必会中对触发器的解释是:MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于 B ...
- MYSQL触发器在PHP项目中用来做信息备份、恢复和清空
案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...
- MySQL触发器在PHP项目中用来做信息备份、恢复和清空的方法介绍
案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...
随机推荐
- hdu_5800_To My Girlfriend(变种背包)
题目链接:hdu_5800_To My Girlfriend 题意: 给你n和物品和一个重量m,让你求 题解: To My Girlfriend 令dp[i][j][s1][s2]表示前i个物品填了j ...
- 错误: libstdc++.so.6: cannot open shared object file: No such file or directory
解压完别人提供的openwrt代码,编译时,出现如下错误: # configuration written to .config#mips-openwrt-linux-uclibc-gcc: erro ...
- Away 3d 入门demo
Away3d是不错的开源Flash 3D引擎,现在最新的版本是4.0,在这个例子中我们使用现在比较稳定的3.6版本,4.0API相较之前变化较大,支持最新的flash player11硬件加速 现在写 ...
- ios控件 UIControl
< UIControl> 1 处理用户事件的控件的基类,如UIButton,UISlider等 2 一般不直接实例化,而是使用他的子类 3 可以通过跟踪触摸事件来设置和获取控件状态,并且这 ...
- 浅谈 qmake 之 shadow build
shadow build shadow build 是什么东西?就是将源码路径和构建路径分开(也就是生成的makefile文件和其他产物都不放到源码路径),以此来保证源码路径的清洁. 这不是qmake ...
- 访问WEB-INF下的jsp/html
基于Servlet的声明,WEB-INF不作为Web应用的公共文档树的一部分.因此,WEB-INF 目录下的资源不是为客户直接服务的.因此客户端不能直接访问WEB-INF下的文件,但是可以通过requ ...
- spice-vdagent
The spice-vdagent should be running in the guest. Have you installed the spice guest tools in your w ...
- Spring Boot 系列教程7-EasyUI-datagrid
jQueryEasyUI jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要 ...
- weak和assign区别
weak比assign多了一个功能,当对象消失后自动把指针变成nil haofanazenmeban[4002:406590] controller:<SecondViewController: ...
- cURL: Learning..
CURL usage.. -v, -m, -H, -I, -s, --connect-timeout, -x, -X GET|POST, -d, -T, -o. --retry, -u curl [o ...