day58-mysql-视图,触发器

一. 视图
        1.1创建视图 create view p_view as select name,age from person;
            视图的作用是隐藏数据,例如上面语句没有查询工资,是为了隐藏它,这样就避免无关人员看到敏感数据。
            注意:视图修改了数据,会导致基本表的数据也随着被修改,或者基本表修改了数据,视图的数据也随着被修改,
                例如视图把名字alex修改为alex_sb,那么基本表对应的名字也被修改。
            
            create view 视图名字 as 查询sql语句;
            
        1.2删除:    drop view 视图名字;
            
        1.3修改:    alter view 视图名字 as 查询sql语句;
            alter view p_view as select name,age,sex from person;--增加sex字段
        
        1.4注意:当视图来自多个基本表时,无法增删改数据。
            create view ps_view as select person.name,dept.dname from peron,dept where person.dept_id = dept.did;
            上面视图来自两个基本表,操作一下增删改试试。

    二. 触发器:监视某个事件,然后触发某个操作。
         触发器创建语法四要素:1.监视地点(table)
                          2.监视事件(insert/update/delete)
                                               3.触发时间(after/before)
                                            4.触发事件(insert/update/delete)
        创建触发器语法
            create trigger triggerName  after/before  insert/update/delete
                 on 表名 for each row #这句话是固定的
             begin
                 #需要执行的sql语句--注意语句后面需要加上分号;
             end
            注意1:after/before: 只能选一个 ,after 表示 后置触发, before 表示前置触发
            注意2:insert/update/delete:只能选一个

        1、监视事件:插入-insert:以商品发货为例:

        1.1创建两张表:商品表goods和订单表order_table,当订单表插入发货数量count时,触发商品表减少相应数量num。
            create table goods(
                id int not null auto_increment primary key,
                name varchar(10) not null,
                num int not null);
            insert into goods values(1,'商品1',10),(2,'商品2',10),(3,'商品3',10);--goods插入数据

            create table order_table(
                oid int not null auto_increment primary key,
                gid int not null,
                count int not null);
        1.2创建触发器:
            create trigger tg2 after insert on order_table --监视order_table这个表的每一行在插入数据之后
            for each ROW
            BEGIN
                update goods set num = num - new.count where id = new.gid;--触发goods减少数量
            end;

        1.3插入数据:insert into order_table values(1,1,3);--goods商品1的数量自动修改为7

        2、监视事件:更新-update:以商品退货为例:
            create trigger tg2 after update on order_table
            for each row
            begin
                update goods set num = num + old.count - new.count where id = new.gid;--old.count - new.count等于减掉的数量,也就是2
            end;

            update order_table set count = count -2 where oid = 6;--订单表order_table退回2个商品给商品表,商品表数量自动加2

        3、监视事件:删除-delete:以删除订单为例:
            create trigger tg3 after delete on order_table
            for each row
            begin 
                update goods set num = num + old.count where id = old.gid;
            end;

            delete from order_table where oid = 1;--删除订单,商品数量自动添加

        4、查看触发器
            show triggers;
        或者右击 order_table--设计表--触发器 查看

 

posted @ 2020-02-04 22:09  梁劲雄  阅读(139)  评论(0)    收藏  举报