视图
含义:虚拟表,和普通表一样使用
MySQL15.1版本出现的新特性,是通过表动态生成的数据
视图:MySQL从5.0.1版本开始提供视图功能。一种虚拟
存在的表,行和列的数据来自定义视图的查询中使用的表
,并且是在使用视图时动态生成的,只保存了sql逻辑,不
保存查询结果
应用场景:
– 多个地方用到同样的查询结果
– 该查询结果使用的sql语句较复杂
好处
重用sql语句
• 简化复杂的sql操作,不必知道它的查询细节
• 保护数据,提高安全性
创建视图
create view 视图名
as
查询语句;
mysql> CREATE VIEW v1
-> AS
-> SELECT * FROM departments WHERE location_id=1700;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from v1;
+---------------+-----------------+------------+-------------+
| department_id | department_name | manager_id | location_id |
+---------------+-----------------+------------+-------------+
| 10 | Adm | 200 | 1700 |
| 30 | Pur | 114 | 1700 |
| 90 | Exe | 100 | 1700 |
| 100 | Fin | 108 | 1700 |
| 110 | Acc | 205 | 1700 |
| 120 | Tre | NULL | 1700 |
| 130 | Cor | NULL | 1700 |
mysql> create view v3 as
-> select * from departments;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from v3 where location_id=1700;
+---------------+-----------------+------------+-------------+
| department_id | department_name | manager_id | location_id |
+---------------+-----------------+------------+-------------+
| 10 | Adm | 200 | 1700 |
| 30 | Pur | 114 | 1700 |
| 90 | Exe | 100 | 1700 |
| 100 | Fin | 108 | 1700 |
| 110 | Acc | 205 | 1700 |
| 120 | Tre | NULL | 1700 |
| 130 | Cor | NULL | 1700 |
视图的修改
mysql> create view v as select * from departments where location_id=1700;
Query OK, 0 rows affected (0.00 sec)
方式一
mysql> create or replace view v as select * from departments where location_id=1400;
Query OK, 0 rows affected (0.00 sec)
方式二
mysql> alter view v as select * from departments where location_id=1200;
Query OK, 0 rows affected (0.00 sec)
删除视图
mysql> drop view v,v1;
Query OK, 0 rows affected (0.00 sec)
查看视图
mysql> desc v;
+-----------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------+------+-----+---------+-------+
| department_id | int(4) | NO | | 0 | |
| department_name | varchar(3) | YES | | NULL | |
| manager_id | int(6) | YES | | NULL | |
| location_id | int(4) | YES | | NULL | |
+-----------------+------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
show create view v;#不大好用
视图的插入更新删除
mysql> create or replace view v as select last_name,email from employees;
Query OK, 0 rows affected (0.00 sec)
插入
mysql> insert into v values('张飞','zg@qq.com');
Query OK, 1 row affected (0.01 sec)
mysql> insert into employees(last_name,email) values('test','sete');
Query OK, 1 row affected (0.00 sec)
更新
mysql> update v set last_name='张无忌' where last_name='张飞';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
删除
mysql> delete from v where last_name in ('张无忌','test');
Query OK, 2 rows affected (0.00 sec)
视图的可更新性和视图中查询的定义有关系,以下类型的
视图是不能更新的。
• 包含以下关键字的sql语句:分组函数、distinct、group by
、having、union或者union all
• 常量视图
• Select中包含子查询
• join
• from一个不能更新的视图
• where子句的子查询引用了from子句中的表
区别
含义:虚拟表,和普通表一样使用
mysql5.1版本出现的新特性,是通过表动态生成的数据
比如:舞蹈班和普通班级的对比
创建语法的关键字 是否实际占用物理空间 使用
视图 create view 只是保存了sql逻辑 增删改查,只是一般不能增删改
表 create table 保存了数据 增删改查
变量
一:系统变量
说明:变量由系统定义,不是用户定义,属于服务器层面
注意:全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认会话级别
1、查看所有系统变量
show global|【session】variables;
2、查看满足条件的部分系统变量
show global|【session】 variables like ‘%char%’;
3、查看指定的系统变量的值
select @@global|【session】系统变量名;
4、为某个系统变量赋值
方式一:
set global|【session】系统变量名=值;
方式二:
set @@global|【session】系统变量名=值;
全局变量:作用域:针对于所有会话(连接)有效,但不能跨重启
会话变量:作用域:针对于当前会话(连接)有效
二:自定义变量
用户变量
作用域:针对于当前会话(连接)有效,作用域同于会话变量
赋值操作符:=或:=
①声明并初始化
SET @变量名=值;
SET @变量名:=值;
SELECT @变量名:=值;
②赋值(更新变量的值)
方式一:
SET @变量名=值;
SET @变量名:=值;
SELECT @变量名:=值;
方式二:
SELECT 字段 INTO @变量名
FROM 表;
③使用(查看变量的值)
SELECT @变量名;
局部变量
作用域:仅仅在定义它的begin end块中有效
应用在 begin end中的第一句话
①声明
DECLARE 变量名 类型;
DECLARE 变量名 类型 【DEFAULT 值】;
②赋值(更新变量的值)
方式一:
SET 局部变量名=值;
SET 局部变量名:=值;
SELECT 局部变量名:=值;
方式二:
SELECT 字段 INTO 具备变量名
FROM 表;
③使用(查看变量的值)
SELECT 局部变量名;
用户变量和局部变量的对比
作用域 定义位置 语法
用户变量 当前会话 会话的任何地方 加@符号,不用指定类型
局部变量 定义它的BEGIN END中 BEGIN END的第一句话 一般不用加@,需要指定类型