三 其他部分
视图
本身是一个虚拟的表,其中的数据来源于数据库中真实存在的表,通过执行时动态生成。并额米有真是保存数据,只是一些SQL语句的集合,可以理解为java中的方法。(应用场景:在多个地方使用到相同的查询时且SQL语句逻辑比较复杂时)
对视图结构和逻辑的更改:
//创建视图
create view 视图名 as 查询语句
create view myView1 as
select avg(salary) , department_id
from employee e
group by department_id
having department_id > 100
order by avg(salary);
//使用视图
select * from myView1;//此时视图作为一个虚拟的表使用,其中的数据来自于真实存在的表
//修改视图逻辑
create or replace view myView1 as ...;//方式一
alter view myView1 as ...;//方式二
//查看视图
desc 视图名
show create 视图名
//删除视图
drop view 视图1, 视图2,....
对视图中数据的更新(一般情况下不允许视图对数据进行更新):
//插入数据
insert into 视图名 values()
insert into 视图名 set 字段 = 值...
//修改数据
update 视图名 set 字段 = 值 ... where 筛选条件
//删除数据
delete from 视图名 where 筛选条件
注意,视图一般是用来查询的,不适用于更新数据,因此不建议使用视图来对真实存在的表中数据进行更新
变量
MySQL中的变量:
系统变量:全局变量和会话变量
自定义变量:用户变量和局部变量
- 系统变量:由系统自动提供,属于服务器层面
//查看系统变量,如果没有显式声明global还是session,则默认是session
show 【global | session】 variables like ''
//查看指定的系统变量的值,如果没有显式声明global还是session,则默认是session
show @@【global | session】.变量名
//为系统变量赋值
set 【global|session 】 变量名=值; //如果没有显式声明global还是session,则默认是session
set @@global.变量名=值;
set @@变量名=值;
- 自定义变量
由用户自己定义的变量,不由系统自动提供
①用户变量:作用与当前会话,可以作用于任何地方
//声明并初始化
set @变量名 = 值;
set @变量名 := 值;
select @变量名 := 值;
//更新变量的值
select 字段 into @变量名 from 表名
//查看用户变量
select @变量名
②局部变量:仅仅只能作用域begin和end中的变量
//声明局部变量
declare 变量名 类型 【default 值】;
//初始化局部变量
declare 变量名 类型 值;
//赋值或更新
set 变量名 = 值;
set 变量名 := 值;
select @变量名 := 值;
select 字段 into 变量名 from 表名
//查看局部变量
select 局部变量名
注意在使用时要区分局部变量和用户变量,在定义和使用时注意@的去留。
存储过程和函数
存储过程和函数类似于java中的方法
存储过程
是一组预先编译好的SQL语句集合,也可以理解为批处理语句
//创建存储过程
delimiter $//表示以$作为结束标记
create procedure 存储过程名(参数模式, 参数名 ,参数类型)
begin
方法体
end $
delimiter $
create procedure myp(inout a int , inout b int)
begin
a = a * 10 ;
b = b * 10 ;
end $
参数模式:IN,OUT,INOUT
存储过程体的每一条sql语句都需要分号结尾
//调用存储过程
set @m = 15$
set @n = 20$
call myp (m , n)$
select @m , @n $
//删除存储过程
drop procedure 存储过程名
//查看存储过程的结构信息
show create procedure 存储过程名
注意,存储过程逻辑不可修改,需要在删除后重新创建
函数
函数时封装的一组SQL语句,与存储过程相似,但是不同的是函数必须有返回值,且只能有一个返回值。因此函数适用于处理数据后返回一个结果,而存储过程适用于批量插入和批量更新
//创建函数
create function 函数名 (参数名 参数类型, ...) returns 返回类型
begin
函数体
//注意函数体中必须要有return语句,建议放在最后
end
//调用函数——执行语句并显示返回值
select 函数名 (实参列表)
//查看函数结构
show create function 函数名
//删除函数
drop function 函数名
流程控制结构
分支
if结构:实现简单的双分支
if (条件 , 值1 , 值2);
select if (0 > 1 , 500 , 1000);
case结构:实现多分支。
当case结构作为表达式出现时,可以在任何地方使用,但当做语句出现时,只能在begin和end中使用
//语法1——类似于switch结构
case 表达式或字段
when 值1 then 语句1;
when 值2 then 语句2;
...
else 语句n;
end 【case】;
//语法2——类似于多重if
case
when 条件1 then 语句1;
when 条件2 then 语句2;
..
else 语句n;
end [case];
if结构:实现多重分支,只能放在begin end中
if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
else 语句n;
end if;
循环结构
循环结构只能够放在begin和end中使用
循环结构分为:while,loop,repeat
loop 一般用于实现简单的死循环
while 先判断后执行
repeat 先执行后判断,无条件至少执行一次
//while循环 类似java中while
标签:while 循环条件 do
循环体
end while 标签;
//loop循环 死循环,类似while(1)
标签:loop
循环体
end loop 标签;
//repeat循环,类似do-while
标签:repeat
循环体
until 结束条件
end repeat 标签;