zoukankan      html  css  js  c++  java
  • MySQL基础(二)

      一、视图

      视图是一个虚拟表(非真实存在),其本质是:根据SQL语句获取动态的数据集,并为其命名。用户使用时只需使用“名称”即可获取结果集,并可以将其当作表来使用。

    select * from (select student_id,num from score where course_id=3)as A 
    where A.num > 60
    临时表搜索

      1、创建视图

    -- 语法:
    --        create view 视图名称 sql语句
    
    create view V1 AS select student_id,num from score where course_id=3
    创建实例

      2、删除视图

    -- 语法:
    --        frop view 视图名称
    drop view v1
    删除视图v1

      3、修改视图

    -- 语法:
    --        alter view 视图名称 as sql语句
    
    alter view v1 as select student_id,num from score 
    where course_id=1
    修改视图v1

      4、使用视图

      使用视图时,将其当作表进行操作即可,由于视图是虚拟表,所以无法使用其对真实表进行创建、更新和删除操作,仅能做查询用。

    select * from v1
    使用视图v1

      二、触发器

      对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行【增/删/改】前后的行为。

      1、创建基本语法

    --  插入前:
    
    create trigger 触发器名称 before insert on 表名 for each row
    begin
        ...
    end
    
    -- 插入后:
    
    create trigger 触发器名称 after insert on 表名 for each row
    begin
        ...
    end
    
    -- 删除前:
    
    create trigger 触发器名称 before delete on 表名 for each row
    begin
        ...
    end
    
    -- 删除后:
    create trigger 触发器名称 after delete on 表名 for each row
    begin
        ...
    end
    
    -- 更新前:
    create trigger 触发器名称 before update on 表名 for each row
    begin
        ...
    end
    
    -- 更新后:
    create trigger 触发器名称 after update on 表名 for each row
    begin
        ...
    end
    6个基本语法
    delimiter //
    create trigger tri_be_ins_t1 before insert on teacher for each row 
    begin 
        insert into class(caption) values('三年一班');
    end //
    delimiter ;
    插入前触发器
    delimiter //
    create trigger tri_be_ins_t2 after insert on teacher for each row 
    begin 
        insert into class(caption) values('一年三班');
    end //
    delimiter ;
    插入后触发器

      特别的:new表示即将插入的数据行,

          old表示即将删除的数据行。

    --   new:
    
    delimiter //
    create trigger tri_be_ins_t3 after insert on student for each row 
    begin 
        insert into teacher(tname) values(new.sname);
    end //
    delimiter ;
    
    --  insert into student(gender,class_id,sname) values('女',3,'友友')
    此时,new.sname = '友友'    new.列名 取即将插入的数据行对应的内容
    
    --   old:
    
    delimiter //
    create trigger tri_be_del_t2 before delete on student for each row 
    begin 
        insert into teacher(tname) values(old.sname);
    end //
    delimiter ;
    
    --  delete from student where sid=19
    此时,old.sname = '小三'    old.列名 取即将删除的数据行对应的内容
    new 和 old

      2、删除触发器

    --   语法:
    --       drop trigger 触发器名
    
    drop trigger tri_be_del_t2
    删除触发器语法

      3、使用触发器

      触发器无法由用户直接调用,只有对表的【增/删/改】操作时,被动引发。

    drop trigger tri_be_del_t2
    触发触发器

      三、存储过程

      存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。

      1、创建存储过程

    -- 创建存储过程
    
    delimiter //
    create procedure p1()
    begin 
        select * from teacher;
    end //
    delimiter ;
    
    
    --  调用存储过程
    
    call p1()
    无参数存储过程

      对于存储过程,可以接收参数,其参数有三类:

    • in          仅用于传入参数用;
    • out        仅用于返回值用(伪造的返回值);
    • inout     既可以传入参数又可以当作返回值(伪造的返回值)。
    --  创建存储过程:
    
    delimiter //
    create procedure p2(
        in t1 int,
        out t2 int,
        inout t3 int 
    )
    begin 
        declare temp1 int;
        declare temp2 int default 2;
        
        set temp1=1;
        set t2=t1+t3+temp1+temp2;
        set t3 = t3 + 10;
    end //
    delimiter ;
    
    --  调用存储过程:
    
    set @s1=0;
    set @s2=2;
    call p2(1,@s1,@s2);
    select @s1,@s2;
    有参数存储过程
    delimiter //
    create procedure p3()
    begin 
        select * from teacher;
    end //
    delimiter ;
    
    --  执行存储过程,里面的SQL语句,有查询结果,返回对应的结果集
    结果集
    --  创建存储过程:
    
    delimiter //
    create procedure p4(
        in t1 int,
        out t2 int,
        inout t3 int 
    )
    begin 
        select * from teacher where tid < t1;
        set t2 = t3 + t1 ;
        set t3 = 99;
    end //
    delimiter ;
    
    --  调用存储过程:
    
    set @s1=0;
    set @s2=3;
    call p4(7,@s1,@s2);
    select @s1,@s2;
    结果集 + out值
  • 相关阅读:
    【笔记】黄如花.信息检索.学习心得
    【心得】Lattice和Xilinx工具关键特性对比(Diamond、ISE)
    【导航】FPGA相关
    【笔记】黄如花.信息检索.前4章心得(新增大牛汇总的公开课资源)
    python正则表达式练习题
    python正则表达式(1)--特殊字符
    【转】什么时候 i = i + 1 并不等于 i += 1?
    Linux查看文件指定行数内容
    python mysqldb批量执行语句executemany
    linux命令行常用快捷键
  • 原文地址:https://www.cnblogs.com/Michael--chen/p/6993705.html
Copyright © 2011-2022 走看看