视图(表)
mysql从5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自自定义视图的查询中使用的表,并且是在视图时动态生成的,只保存类sql逻辑,不保存查询结果。
场景:
SQL语句复杂;重复使用的SQL语句 。
好处:
1.重用sql语句。
2.简化复杂的sql操作,不必自动它的查询细节。
3.保护数据,提供安全性。
创建视图
语法:create view 视图名
as
sql语句;(可重复使用的临时表)
删除视图
语法:drop view 视图名(,视图名...);
查看视图
方式一:desc 视图名;
方式二:show create view 视图名;(过程 )
视图的修改
方式一:create or replace view 视图名 as 新sql语句;
方式二:alter view 视图名 as 新sql语句;
视图的使用(封装的视图)
1.插入 2.修改 3.删除(视图加原始表的跟新) 4.查看 例:select *from 视图名 条件;
不允许修改的视图:
1.关键字:分组函数、distinct、group by、having、union或者union all
2.常量视图
3.select中包含子查询
4.join语句
5.from一个不能更新的视图
6.where子句的子查询引用了from子句的表
变量
系统变量: 全局变量;回话变量
自定义变量: 用户变量;局部变量
一、系统变量
说明:由系统提供,属于服务器层面使用的语法;
1.查看所有的系统变量
show global #系统|【session】 variables;
2.查看满足条件的部分系统变量;
例: show global #系统|【session】 variables like "%char%";
3.查看指定的某个系统变量的值;
select @@global | 【session】.系统变量名;
4.为某个系统变量赋值
set global |【session】.系统变量名=值;
或 set @@global |【session】.系统变量名=值;
注:global #系统变量 ; session #回话变量,如果不写则默认
1.全局变量作用域:服务器每次开启前为所用的全局变量赋初始值,针对于所有的回话(连接)有效,但不能跨重启;
2.回话变量作用域:仅仅针对当前回话(连接)有效;
二、自定义变量
说明:变量是用户自定义的,不是系统给的
使用步骤:声明
赋值
使用(查看、比较、运算)
1.用户变量
作用域:仅仅针对当前回话(连接)有效;
1.声明并初始化:/ 方式一 赋值:
set @用户变量名=值;
或 set @用户变量名:=值;
或 select @用户变量名:=值;
2.方式二赋值: select 字段 into @变量名 from 表;
3.使用(查看):select @用户变量名;
2.局部有效
作用域:仅仅在定义它的begin end 中有效,应用在第一局话
1.声明:declare 变量名 类型【default 值】;
2.赋值
方式一 :
set @局部变量名=值;
或 set @局部变量名:=值;
或 select @局部变量名:=值;
方式二: select 字段 into @变量名 from 表;
3.使用(查看):select @局部变量名;
存储过程(方法)
含义:一组预先编译好的SQL语句的集合,理解成批处理语句
1.提高代码的重用性
2.简化操作
3.减少的编译次数并减少类和数据库服务的连接次数,提高的效率
创建语法
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法的sql的语句)
end
注:1.参数列表:参数模式 参数名 参数类型
例:IN stuname varchar(20)
IN,OUT,INOUT 参数作为参数输入,输出
2.仅仅只有一句话,begin end 可以被省略
3.delimited $ 结束标记
4.设置变量:
declare 变量名 参数类型 default ' '; #声明并初始化
** INTO 变量名 #赋值
select 变量名; #使用
调用
call 存储过程名(实参列表);
out的使用:
set @输出参数 $ # 可以省略 定义用户变量
call 存储过程名(输入参数,@输出参数)$ #为两个输出量赋上了值
select @输出参数 $
删除
语法:drop procedure 存储过程名;
注:一次只能删除一个过程
查看
show create procedure 存储过程名;
函数
含义:一组预先编译好的SQL语句的集合,理解成批处理语句
1.提高代码的重用性
2.简化操作
3.减少的编译次数并减少类和数据库服务的连接次数,提高的效率
delimited $ 结束标记
存储过程与函数区别:
存储过程:可以返回0个返回,也可以有多个返回,适合做批量插入,批量跟新
函数:有且仅有1个返回,适合做处理数据后返回一个结果
创建
语法:create function 函数名(参数列表) returns 返回类型
begin
函数体
end $
注:1.参数列表:参数名 参数列表
2.肯定会有return语句,如果没有会报错。如果没有写在最后,不报错但不建议
3.仅有一句话,则可以省略begin end
调用
语法:select 函数名(参数列表)
declare 变量名 参数类型 default ' '; #定义局部变量
查看函数
show create function 函数名;
删除
drop function 函数名;
流程控制结构
顺序结构
分支结构
1.if函数
功能:实现简单的分支
语法:if(条件,值1,值2)
位置:可以作为表达式放在任何位置
2.case结构
功能:实现多分支
语法:
case 表达式或字段
when 值1 then 语句1;
when 值2 then 语句2;
...
else 语句n;
end [case]
位置:可以放在任何位置
begin end外,作为表达式结合者其他语句使用
begin end里面,一般作为独立的语句使用
3.if/else
功能:实现多分支
语法:
case
when 条件1 then 语句1;
when 条件2 then 语句2;
...
else 语句n;
end if;
位置:
只能放在begin end中
循环结构
位置:只能放在begin end中
特点:都能实现循环结构
对比:
1.三种循环都可以省略名称,但是如果循环中添加了循环控制语句,则必须添加名称
2.loop 一般用于实现简单的死循环
while 先判断后执行
repeat 先执行后判断,无条件至少执行一次
1.while
语法:
【名称:】while 循环条件 do
循环体
end while 【名称】;
2.loop
语法:
【名称:】loop
循环体
end loop
3.repeat
语法:
【语法:】
【名称:】repeat
循环体
until 结束条件
end repea 【名称】
4.循环控制语句
leave:类似于braeak,用于跳出所在的循环
iterate:类似于continue,用于结束本次循环,提高类效率