MySQL视图

视图 (view)  视图 view(保存sql逻辑)   表 table(占用)

  1. 虚拟表: 和普通表一样 mysql5.1版本出现的新特性,通过表动态生成的数据,只保存sql逻辑,不保存查询结果
  2. 应用场景:
    1. 多个地方用到同样的查询结果
    2. 该查询结果使用的sql语句较复杂
    3.  示例:
      CREATE VIEW v1                               创建一个v1的view视图表AS
      select stuname ,majorName
      from stu.stuinfo s
      inner join major m on s.majorid = m.id;
      SELECT * FROM v1 WHERE stuname LIKE '%三' 调用v1的视图表
    4. # 查找job表,employees,department表中员工名包含a的
      use myemployees;
      create view myv1
      as
      select last_name,department_name,job_title
      from employees e
      join departments d on d.department_id = e.department_id
      join jobs j on j.job_id = e.job_id;
      # 使用
      select * from myv1 where last_name like '%a%';
  3.  创建视图:
    •  create view 视图名
    •     as
    •     查询语句;
  4.  特点:
    1. 重用sql语句
    2. 简化复杂的sql操作,不必知道它的查询细节
    3. 保护数据,提高安全性
  5.  视图的修改
      • create or repacle view 视图名     方式一
      • as
      • 查询语句;
      • alter view 视图名
      • as
      • 查询语句;
  6.  删除视图
    • drop view 视图名,视图名;
  7.  查看视图
    • desc 视图名;
      show create view 视图名
  8.  视图的更新:
    •  insert 可以在视图中使用,也可以对原始表进行更新
    •  update 可以子啊视图中使用,原始表也随之更改
  9.  具备一下特点的视图不允许更新
    • 分组函数 ,distinct,group by,having,union 或者 union all
    • 常量视图 
    • select中包含子查询
    • 含有join语句的连接其他表的
    • from 一个不能更新的视图
    • where子句的子查询引用了from子句中的表
  10.  delete 和 truncate 在事务中使用的区别
    • truncate 在事务中进行了rollback 回滚但是我在回滚之前的truncate操作会永久性的生效,不会受rollback影响。
    • delete 在事务中进行操作,rollback回滚之后回恢复delete之前的状态

变量

  1. 分类
  2. 系统变量
    1. 全局变量 系统变量是由系统提供的,不是用户定义的,属于服务器层面使用语法(全局加global)
      1. show global  {session}  variables;   查看所有的系统变量
      2. show global session variables like “%char%” 查看满足条件的部分系统变量
      3. 查看指定的系统变量的值  select @@global  {session};
      4. 未某个系统变量赋值 set global 【session】 系统变量名 = 值    set@@global 【session】 。系统变量名 = 值;
    2. 会话变量 (仅仅针对于当前会话连接有效)
      1. 查看所有会话变量 show session variables;
      2. show session variables;
        show variables;
        show variables like '%char%';
      3. select @@会话变量名;
      4. 赋值 set 会话变量名=' '; 
      5. set session 会话变量名 = ‘ ’;
    3. 自定义变量(变量自定义,不是系统提供的) 使用步骤: 声明,赋值,使用
      • 用户变量 (可以放在任何位置   begin end 里面或者外面) 
        • 作用域,针对于当前会话连接有效
        • 生明并初始化:
          • set @用户变量名 = 值;
          • set  @yhblm :=值;
          • select @yhblm:=值;
        • 赋值
          • 通过set 或select 
          • set @用户变量名 = 值;
          • set  @yhblm :=值;
          • select @yhblm:=值;
          • select 字段 into yhblm from 表;
      • 局部变量
        • 仅仅在局部变量有效 在begin end里面 
        • 声明:
          • declare 变量名 类型;
          • declare 变量名default 值;
        •  赋值:
          • 通过set或select
          • set jbblm = 值;
          • set  jbblm:=值;
          • select jbblm:=值;
          • select 字段 into jbblm  from 表;
        •  应用在begin end 的第一句话;
  3.  存储过程和函数(类似于java中的方法)
    • 提高代码重用性,简化操作 ,减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
    • 存储过程
      • 一组预先编译好的sql语句的集合。
    •  创建语法
      • create procedure 存储过程名(参数列表)
      • begin
      •  存储过程体(一组合法的sql语句)
      • end
      • 注意:
      • 如果存储体只有一句话,begin end 可以省略 ,存储过程体每一条必须加分号
      • 存储过程的结尾可以使用delimiter重新设置
      • 语法:
        • delimiter 结束标记
        • 案例
        • delimiter $
          • 调用语法:
          • call 存储过程名(实参列表)
      • 参数列表包含三部分:
        • 参数模式
        • 参数名
        • 参数类型
        • 举例: 
          • in:该参数可以作为输入 该参数需要调用方法传入值
          • out :该参数可以作为返回值
          • inout:既可以作为输入,又可以输出
    • 定义一个theSal2的存储过程函数,通过部门名称获取每个部门的平均薪资
      delimiter $
      create procedure theSal2(in deptname varchar(3),out sal double(10,2))
      begin
      select avg(salary) into sal
      from departments d
      left join employees e on d.department_id = e.department_id
      where d.department_name = deptname;
      end $

      call theSal1('Adm',@sal)$;
      select @sal$;
    • theSal3 根据部门名称查询部门的平均薪资和部门的总人数
      delimiter $
      create procedure theSal3(in deptname varchar(3),out sal double(10,2),out number int(10))
      begin
      select count(*) ,avg(salary) into number,sal
      from departments d
      left join employees e on d.department_id = e.department_id
      where d.department_name = deptname
      group by d.department_id;
      end $

      call theSal3('Shi',@sal,@number);
      select @sal;
      select @number;
    • delimiter $   # inout
      create procedure myp9(inout a int,inout b int)
      begin
      set a = a*2;
      set b = b+3;
      end $

      set @aa = 10$;
      set @bb = 20$;
      call myp9(@aa,@bb)$;
      select @aa,@bb;
    • 删除存储过程(存储过程无法去修改begin 到end 里面的存储过程语句)
      • 语法:drop procedure 存储过程名称 一次删除一个  
      • drop procedure myp9;
      • 查看存储过程的信息; show create procedure 存储过程名称
      • show create procedure myp8
  4.  
  5.  
  6.  

 

posted @ 2021-09-15 16:53  一只小白菜。  阅读(146)  评论(0)    收藏  举报