zoukankan      html  css  js  c++  java
  • 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--设计表--触发器 查看
  • 相关阅读:
    打造自定义 eslint
    二叉树(三): 二叉查找树
    二叉树(二): 补充
    二叉树(一): 遍历
    redux 源码浅析
    react-redux 源码浅析
    WebComponents使用以及思考
    SHELL 语法以及实例
    React-Native 原生 APP 更新
    关于 cdn 在项目中的使用
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12261737.html
Copyright © 2011-2022 走看看