zoukankan      html  css  js  c++  java
  • 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 ;
  • 相关阅读:
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
  • 原文地址:https://www.cnblogs.com/ywl01/p/3640456.html
Copyright © 2011-2022 走看看