CentOS 7,mysql5.7
数据库视图是虚拟表或逻辑表,它被定义为具有连接的SQL SELECT查询语句。 因为数据库视图与数据库表类似,它由行和列组成,因此可以根据数据库表查询数据。 大多数数据库管理系统(包括MySQL)允许您通过具有一些先决条件的数据库视图来更新基础表中的数据。
本篇文章主要简述下mysql视图类型、创建、使用及相关特性;
视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。下图可以很好的阐述:
数据库视图是动态的,因为它与物理模式无关。数据库系统将数据库视图存储为具有连接的SQL SELECT语句。当表的数据发生变化时,视图也反映了这些数据的变化。
视图主要分为可更新及不可更新;这主要取决于算法;mysql主要有三种算法:
创建视图时,可指定视图类型:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
上述所说视图含有下述查询组合则不可使用MERGE算法:
视图创建的语句格式如下:
CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
注:
1、ALGORITHM选项:选择在处理定义视图的select语句中使用的方法
2、DEFINER选项:指出谁是视图的创建者或定义者
3、SQL SECURITY选项:要查询一个视图,首先必须要具有对视图的select权限。但是,如果同一个用户对于视图所访问的表没有select权限,那会怎么样?
SQL SECURITY选项决定执行的结果:
视图权限总结:使用root用户定义一个视图(推荐使用第一种):u1、u2
4、WITH CHECK OPTION约束
通常创建视图的数据来源有:
下属三个实例对应上述三种视图:
单表:
CREATE VIEW officeInfo AS SELECT
officeCode,
phone,
city
FROM
offices;
多表组合:
CREATE VIEW v_match AS SELECT
a.PLAYERNO,
a. NAME,
MATCHNO,
WON,
LOST,
c.TEAMNO,
c.DIVISION
FROM
PLAYERS a,
MATCHES b,
TEAMS c
WHERE
a.PLAYERNO = b.PLAYERNO
AND b.TEAMNO = c.TEAMNO;
视图:
CREATE VIEW v_match_1 AS SELECT
*
FROM
v_match
WHERE
PLAYERNO LIKE '2018%';
在数据库中,视图和表共享相同的命名空间,因此视图和表不能具有相同的名称。 另外,视图的名称必须遵循表的命名规则。
因为视图和表共享相同的命名空间。要知道哪个对象是视图或表,请使用SHOW FULL TABLES
命令,如下所示:
mysql> SHOW FULL TABLES;
+--------------------+------------+
| Tables_in_yiibaidb | Table_type |
+--------------------+------------+
| orders | BASE TABLE |
| payments | BASE TABLE |
| productlines | BASE TABLE |
| products | BASE TABLE |
| saleperorder | VIEW |
+--------------------+------------+
SELECT语句必须遵循以下几个规则:
视图主要是用来进行数据筛选;故主要还是进行数据查询;单可更新的视图仍可进行编辑和删除但这里不推荐使用;
视图的操作如表结构一致;这里就不赘述;
视图数据的一致性指的是上述可更新的视图可以通过insert、update来更新视图从而更新基础表数据;
上述两种更新使视图不一致。为了确保视图的一致性,在创建或修改视图时使用WITH CHECK OPTION
子句。
CREATE OR REPLACE VIEW view_name
AS
select_statement
WITH CHECK OPTION;
加上上述则新增修改的数据如果不满足视图的筛选条件则不可更新;
数据库视图的优点:
出来上述说的优点,视图仍有下述缺点: