视图
Mysql从5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生产的,只保存了sql,不保存查询结果。
应用场景:
- 多个地方用到同样的查询结果
- 该查询结果使用的sql语句较复杂
示例:
CREATE VIEW my_vl
AS
SELECT studengname,majorname
from students s
INNER JOIN major m
ON s.majorid=m.majorid
WHERE s,majorid=1;
SELECT * FROM my_vl WHERE studengname like '张%'
# 总结:将某些复杂的sql语句封装成视图,然后查询视图得到结果
一、创建视图 CREATE VIEW 视图名 AS 查询语句;
二、修改视图
方式1:CREATE OR REPLACE VIEW 视图名
AS
查询语句;
方式2:ALTER VIEW 视图名
AS
查询语句;
三、删除视图
DROP VIEW 视图名,视图名..;
四、查看视图
DESC 视图名;(查看视图的结构)
SHOW CREATE VIEW 视图名;(查看视图的创建过程)
SELECT * FROM 视图名;(查看视图的结果集)
视图的可更新性和视图中查询的定义有关系,一下类型的视图是不能更新的。
- 包含一下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
- 常量视图()
- Select中包含子查询
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表
总结:一般视图时不允许做更新操作的。更新视图会更新到原始表
视图的好处:
- 重用sql语句
- 简化复杂的sql操作,不必知道它的查询细节
- 保护数据,提高安全性
视图与表的对比
创建语法的关键字 | 是否实际占用物理空间 | 使用 | |
视图 | create view | 只是保存了sql逻辑 | 增删改查,只是一般不能增删改 |
表 | create table | 保存了数据 | 增删改查 |
变量
系统变量:
- 全局变量:作用域:服务器每次启动将为所有的全局变量赋初始值,针对于所有的会话(连接)有效,但不能跨重启。(如若需每次启动之后值被修改,则需要去修改配置文件)
- 会话变量:作用域:仅仅针对于当前会话(连接)有效
自定义变量:
- 用户变量:作用域:针对于当前会话(连接)有效,同于会话变量的作用域应用在任何地方,也就是begin end里面或begin end的外面
局部变量:作用域:仅仅在定义它的begin end中有效,应用在begin end中的第一句话!!
/*
一、系统变量
说明:变量由系统提供,不是用户定义,数据服务器层面
使用的语法:
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,如果不写,则默认session
/*
二、自定义变量
说明:变量是用户自定义的,不是由系统的
使用步骤:声明、赋值、使用(查看、比较、运算等)
*/
#①声明并初始化
set @用户变量名 = 值;或
set @用户变量名 :=值;或
select @用户变量名 :=值
#②赋值(更新用户变量的值)
方式一:通过SET或SELECT
set @用户变量名 = 值;或
set @用户变量名 :=值;或
select @用户变量名 :=值
方式二:通过select into
select 字段 into @变量名
FROM 表;
#③使用(查看用户变量的值)
SELECT @用户变量名;
/*
局部变量
*/
#①声明
DECLARE 变量名 类型;
DECLARE 变量名 类型 DEFAULT 值;
#②赋值
方式一:通过SET或SELECT
set 局部变量名 = 值;或
set 局部变量名 :=值;或
select @局部变量名 :=值
方式二:通过select into
select 字段 into @局部变量名
FROM 表;
#③使用
SELECT 局部变量名;
对比用户变量和局部变量
作用域 | 定义和使用的位置 | 语法 | |
用户变量 | 当前会话 | 会话中的任何地方 | 必须加@符号,不用限定类型 |
局部变量 | BEGIN END 中 | 只能在BEGIN END中,且为第一句话 | 一般不用加@符号(用select的时候需要加@),需要限定类型 |