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;