mysql 视图 变量 存储过程

39 阅读2分钟

视图

增删改查和表一样,唯一变的是table改成view

视图会继承基表(源表)上的主键,但是在视图查看表头key显示空白

视图表就是保存了select语句的查询结果,可以理解为select语句的别名。

原表数据变化后,视图表的结果也会发生变化

安全原因,视图可以隐藏一些数据

CREATE VIEW "视图表名" AS "SELECT 语句";   #创建视图表  ​ 
DROP VIEW "视图表名";                     #删除视图表
  1. 如果视图表是两个表的连接查询,则无法插入数据。因为表结构和原表不一致。

  2. 如果视图表的结构和原表结构一致,可以修改和插入数据。

    • 例如原表有3个字段,视图表有2个字段,只要这2个字段和原表结构是一致的,也可以修改和插入数据。(只要该视图表是对单个表的查询结果即可)

变量

系统变量 @@

查看所有系统变量

    show global variables;   # 查看所有全局变量
show session variables;  # 查看当前会话变量

查看满足条件的部分变量

    show global variables like '%char%';  # 不指定global的话,默认为会话变量

查看某个系统变量

变量结构为@@变量名、@@global.变量名、@@session.变量名

select @@tx_isolation;   # 默认为会话变量

为系统变量赋值

    set global|session 系统变量名=值
    set @@global|session.系统变量名=值
    
    

用户变量

作用域
	仅对当前会话有效,同于会话变量作用域
声明并初始化
	
            SET @用户变量=SET @用户变量:=SELECT @用户变量:=

赋值

            SET @用户变量=SET @用户变量:=SELECT @用户变量:=SELECT 字段 INTO @用户变量 FROM

使用

            SELECT @变量
            

存储过程

存储过程是可编程的函数,在数据库中创建并保存,可以由一组SQL语句和控制结构组成。 减少了编译次数并减少了和数据库的连接次数,提高了效率

创建存储过程:

DELIMITER $$                  #将语句的结束符号从分号;临时改为两个$$ (可以是自定义)  
CREATE PROCEDURE Proc (参数模式 名称 类型)     
-> BEGIN                      #过程体以关键字BEGIN开始  
-> select * from store_info;  #过程体语句  
-> END $$                     #过程体以关键字END结束  ​  
DELIMITER;                    #将语句的结束符号恢复为分号

调用存储过程 

CALL Proc(实参);


参数模式
     IN 输入参数:  表示调用者向过程传入值。(传入值可以是字面量或变量)
     OUT 输出参数:  表示过程向调用者传出值。(可以返回多个值)(传出值只能是变量)
     INOUT 输入输出参数:  既表示调用者向过程传入值,又表示过程向调用者传出值。(值只能是变量)
         

查看存储过程

 show create procedure proc01;
 show create procedure proc01\G       #查看存储过程的具体信息
 ​
 show procedure status like '%Proc01%'\G

删除存储过程

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。

 drop procedure if exists proc01;
 #仅当存在时删除,不添加If EXISTS 时,如果指定的过程不存在,则产生一个错误。

条件语句 if-then-else . .. . end if

 delimiter $$  
 create procedure proc03(in innum int)   #创建存储过程proc03,参数为innum,类型为int 
 -> begin 
 -> declare var int;         #定义变量var为int类型 
 -> set var=innum*2;         #变量var的值等于传入的参数值乘2
 -> if var>=10 then          #当var的值大于10时,id值会加1,否则减1
 -> update t set id=id+1;  
 -> else 
 -> update t set id=id-1;  
 -> end if;  
 -> end $$
  
 delimiter ;
 ​
 call proc03(8);    #调用存储过程,并传入参数8
 ​
 call proc03(3);    #调用存储过程,并传入参数3

循环语句 while ···· end while

 delimiter $$                   #修改默认结束符为$$
 create procedure proc04()      #创建存储过程proc04
 -> begin                       #过程体以关键字begin开始
 -> declare var int(10);        #定义变量var为int类型
 -> set var=0;                  #var的起始值为0
 -> while var<6 do              #使用while循环,当var值小于6时满足条件,则向表中插入var的值
 -> insert into t values(var);  
 -> set var=var+1;              #每次循环后var值自增1
 -> end while;                  #结束while循环
 -> end $$                      #创建存储过程结束
 ​
 delimiter ;                    #重新修改默认结束符为原始的;
 ​
 call proc04;                   #调用存储过程proc04