1.视图

一、含义
mysql5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行时动态生成。
好处:
1、简化sql语句
2、提高了sql的重用性
3、保护基表的数据,提高了安全性
二、创建
create view 视图名
as
查询语句;
三、修改
方式一:
create or replace view 视图名
as
查询语句;
方式二:
alter view 视图名
as
查询语句
四、删除
drop view 视图1,视图2,…;
五、查看
desc 视图名;
show create view 视图名;
六、使用
1.插入
insert
2.修改
update
3.删除
delete
4.查看
select
注意:视图一般用于查询的,而不是更新的,所以具备以下特点的视图都不允许更新
①包含分组函数、group by、distinct、having、union、
②join
③常量视图
④where后的子查询用到了from中的表
⑤用到了不可更新的视图
七、视图和表的对比
关键字 是否占用物理空间 使用
视图 view 占用较小,只保存sql逻辑 一般用于查询
表 table 保存实际的数据 增删改查

2.变量

分类
一、系统变量
说明:变量由系统提供的,不用自定义
语法:
①查看系统变量
show 【global|session 】variables like ‘’; 如果没有显式声明global还是session,则默认是session
②查看指定的系统变量的值
select @@【global|session】.变量名; 如果没有显式声明global还是session,则默认是session
③为系统变量赋值
方式一:
set 【global|session 】 变量名=值; 如果没有显式声明global还是session,则默认是session
方式二:
set @@global.变量名=值;
set @@变量名=值;
1、全局变量
服务器层面上的,必须拥有super权限才能为系统变量赋值,作用域为整个服务器,也就是针对于所有连接(会话)有效
2、会话变量
服务器为每一个连接的客户端都提供了系统变量,作用域为当前的连接(会话)
二、自定义变量
说明:
1、用户变量
作用域:针对于当前连接(会话)生效
位置:begin end里面,也可以放在外面
使用:
①声明并赋值:
set @变量名=值;或
set @变量名:=值;或
select @变量名:=值;
②更新值
方式一:
set @变量名=值;或
set @变量名:=值;或
select @变量名:=值;
方式二:
select xx into @变量名 from 表;
③使用
select @变量名;
2、局部变量
作用域:仅仅在定义它的begin end中有效
位置:只能放在begin end中,而且只能放在第一句
使用:
①声明
declare 变量名 类型 【default 值】;
②赋值或更新
方式一:
set 变量名=值;或
set 变量名:=值;或
select @变量名:=值;
方式二:
select xx into 变量名 from 表;
③使用
select 变量名;

3.存储过程和函数

说明:都类似于java中的方法,将一组完成特定功能的逻辑语句包装起来,对外暴露名字
好处:
1、提高重用性
2、sql语句简单
3、减少了和数据库服务器连接的次数,提高了效率
分类:
1、无返回无参

2、仅仅带in类型,无返回有参
3、仅仅带out类型,有返回无参

4、既带in又带out,有返回有参

5、带inout,有返回有参

注意:in、out、inout都可以在一个存储过程中带多个
###创建存储过程语法:

create procedure 存储过程名(in|out|inout 参数名 参数类型,…) begin
存储过程体

end
类似于方法:修饰符 返回类型 方法名(参数类型 参数名,…)
{ 方法体; }

注意

1、需要设置新的结束标记

delimiter 新的结束标记

示例: delimiter $


CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,…)

BEGIN

sql语句1;

sql语句2;

END $

2、存储过程体中可以有多条sql语句,如果仅仅一条sql语句,则可以省略begin end

3、参数前面的符号的意思

in:该参数只能作为输入 (该参数不能做返回值)

out:该参数只能作为输出(该参数只能做返回值)

inout:既能做输入又能做输出

###调用存储过程

call 存储过程名(实参列表)

##函数
###创建函数学过的函数:
LENGTH、SUBSTR、CONCAT等语法:

CREATE FUNCTION 函数名(参数名 参数类型,…) RETURNS 返回类型

BEGIN

函数体

END

###调用函数

SELECT 函数名(实参列表)

###函数和存储过程的区别

关键字 调用语法 返回值 应用场景


函数 FUNCTION SELECT 函数() 只能是一个 一般用于查询结果为一个值并返回时,当有返回值而且仅仅一个


存储过程 PROCEDURE CALL 存储过程() 可以有0个或多个 一般用于更新

4.流程控制结构

说明:
顺序结构:程序从上往下依次执行
分支结构:程序按条件进行选择执行,从两条或多条路径中选择一条执行
循环结构:程序满足一定条件下,重复执行一组语句

一、if函数
语法:if(条件,值1,值2)
特点:可以用在任何位置
二、case语句语法:
情况一:
类似于switch
case 表达式
when 值1 then 结果1或语句1(如果是语句,需要加分号)
when 值2 then 结果2或语句2(如果是语句,需要加分号)

else 结果n或语句n(如果是语句,需要加分号)
end 【case】
(如果是放在begin end中需要加上case,如果放在select后面不需要)

情况二:类似于多重if
case
when 条件1 then 结果1或语句1(如果是语句,需要加分号)
when 条件2 then 结果2或语句2(如果是语句,需要加分号)

else 结果n或语句n(如果是语句,需要加分号)
end 【case】
(如果是放在begin end中需要加上case,如果放在select后面不需要)
特点:可以用在任何位置

情况三、if elseif语句
语法:
if 情况1
then 语句1;
elseif 情况2 then 语句2;

else 语句n;
end if;
特点:只能用在begin end中!!!!!!!!!!!!!!!

三者比较:应用场合
if函数 简单双分支
case结构 等值判断 的多分支
if结构 区间判断 的多分支

###循环语法:
①【标签:】WHILE 循环条件 DO
循环体
END WHILE 【标签】;(类似于java中的while语句)
②【标签:】 repeat
循环体
until 结束条件
END repeat【标签】;(类似于do while)
③【标签:】loop
循环体
END loop【标签】;(简单的死循环)
特点:只能放在BEGIN END里面如果要搭配leave跳转语句,需要使用标签,否则可以不用标签
leave类似于java中的break语句,跳出所在循环!
itrator类似于java中的continue,继续下一次循环