【Mysql学习日志】视图|触发器|存储过程|函数|索引

1.视图

MySQL视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来*定义视图的查询所引用的表,并且在引用视图时动态生成。

1)视点集中

2)简化操作

3)定制数据

4)合并分割数据

5)安全性

创建格式:create view 视图名称 as SQL语句

删除格式:drop view 视图名称

修改格式:alter view 视图名称 as SQL语句

创建视图后使用视图修改后原始表也会跟着修改,原始表修改视图也会修改,因为视图时动态查询的。

创建视图存在如下注意事项:

(1)运行创建视图的语句需要用户具有创建视图(crate view)的权限,若加了[or replace]时,还需要用户具有删除视图(drop view)的权限;

(2) select语句不能包含from子句中的子查询;

(3) select语句不能引用系统或用户变量;

(4) select语句不能引用预处理语句参数;

(5)在存储子程序内,定义不能引用子程序参数或局部变量;

(6)在定义中引用的表或视图必须存在。但是,创建了MySQL视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用check table语句;

(7)在定义中不能引用temporary表,不能创建temporary视图;

(8)在视图定义中命名的表必须已存在;

(9)不能将触发程序与视图关联在一起;

(10)在视图定义中允许使用order by,但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略。

2.触发器

 

3.存储过程--类似于函数

基本创建格式:

delimiter //       #将执行SQL语句的结束符号改为//

create procedure t1(

in parameter int,              #传入参数

out ret int,               #返回参数

inout currency int             #可作用为传入参数也可作用为返回参数

)

begin                    #存储过程开始 中间可以有多条SQL语句

  declare temp1 int;      #声明变量

  declare temp2 int default 0; #声明变量并赋值

  set temp1 = 1;         #赋值操作 

  set ret = temp1 + parameter + temp2;

  set currency  = currency  + parameter + temp1 + temp2;

  SQL语句;      #通常以(;)结束SQL语句,所以前面需要改变结束符号

  SQL语句;

end//          #储存过程结束

delimiter ;       #修改回默认结束符号

delimiter //
CREATE PROCEDURE fun ( IN parameter INT, OUT ret INT, INOUT currency INT ) BEGIN
    DECLARE
        temp1 INT;
    DECLARE
        temp2 INT DEFAULT 0;
    
    SET temp1 = 1;
    
    SET ret = temp1 + parameter + temp2;
    
    SET currency = currency + parameter + temp1 + temp1;

END // delimiter;

基本执行格式

set @ret = 0;       #不写默认为null

set @currency = 4;

call t1(123,@ret,@currency);

select @ret;        #124

select @currency;     #128

pymysql执行使用 callproc()方法

SET @ret = 0;

SET @currency = 4;
CALL fun ( 123, @ret, @currency );
SELECT
    @ret;
SELECT
    @currency;

 

【Mysql学习日志】视图|触发器|存储过程|函数|索引

上一篇:【PostgreSQL】01 环境搭建


下一篇:LevelDB,你好~