• 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 ;
  • 相关阅读:
    VS2012 窗口布局, update1 和 英语语言包 离线安装方法
    C/C++ 笔记
    MFC学习笔记
    理解虚基类、虚函数与纯虚函数的概念
    ffmpeg使用
    gif制作 & word2007插入gif
    WIN8电脑开机怎么进入安全模式啊?
    vs2012 win8 64 visual assistX 中文 ??
    21 获取文件大小的方法
    20 线程中添加超时的方法
  • 原文地址:https://www.cnblogs.com/ywl01/p/3640456.html
Copyright © 2020-2023  润新知