1.1 概述
视图
是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。——百度百科
视图是虚拟表,本身不存储数据,而是按照指定的方式进行查询。
1.2 视图的基本使用
操作指令 | 代码 |
---|---|
创建视图 | CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...; |
使用视图 | 当成表使用就好 |
修改视图 | CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...]; |
查看数据库已有视图 | >SHOW TABLES [like...]; (可以使用模糊查找) |
查看视图详情 | DESC 视图名 或者SHOW FIELDS FROM 视图名 |
视图条件限制 | [WITH CHECK OPTION] |
删除视图 | DROP VIEW [IF EXISTS] 视图名1 |
1.3 创建视图
创建视图:
CREATE VIEW 视图名 AS
;
-- 准备一张表 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for sys_job -- ---------------------------- DROP TABLE IF EXISTS `sys_job`; CREATE TABLE `sys_job` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '岗位ID', `name` varchar(255) NOT NULL COMMENT '岗位名称', `enabled` bit(1) NOT NULL COMMENT '岗位状态', `job_sort` int(5) DEFAULT NULL COMMENT '排序', `is_deleted` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '逻辑删除 1(true)已删除, 0(false)未删除', `create_time` datetime NOT NULL COMMENT '创建日期', `create_by` varchar(20) NOT NULL COMMENT '创建人', `update_time` datetime NOT NULL COMMENT '更新时间', `update_by` varchar(20) NOT NULL COMMENT '更新人', `version` bigint(32) NOT NULL COMMENT '版本', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `uniq_name` (`name`), KEY `inx_enabled` (`enabled`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='岗位'; -- ###################################################################### -- 创建视图 CREATE VIEW v_job AS SELECT * FROM sys_job; -- 查询结果 SELECT * FROM v_job;
总结: 使用视图和使用表完全一样,只需要把视图当成一张表就OK了。视图是一张虚拟表。
1.4 修改视图
修改和创建视图可以使用代码 :
CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...]
;
-- 修改视图(只需要查询id、name) CREATE OR REPLACE VIEW v_job AS SELECT id,name FROM sys_job; -- 查询结果 SELECT * FROM v_job;
1.5 查看视图
-- 查看数据库已有视图(可以使用模糊查找) SHOW TABLES; -- 得到所有的表和视图 SHOW TABLES LIKE 'v_%'; -- 查看视图详情{(desc 视图名)/(show fields from 视图名)} DESC v_job; SHOW FIELDS FROM v_job;
总结: 通过
show tables;
反馈得到所有的表和视图。同样的,我们可以通过模糊检索的方式专门查看视图,这个时候,视图的命令统一采用v视图名v视图名的优势就体现出来了。
1.6 视图与数据变更
1.6.1 表格数据变更
将表 v_job 中的数据进行更新,在通过视图检索:
-- 表格数据变更 UPDATE v_job SET name = '视图修改' WHERE id = 16; SELECT * FROM v_job;
总结:
视图不是表,不保存数据,只是一张虚拟表;
1.6.2 表格数据插入
1.6.3 WITH CHECK OPTION约束
如果在创建视图的时候制定了“WITH CHECK OPTION”,那么更新数据时不能插入或更新不符合视图限制条件的记录。
作用:
对视图所做的DML操作的结果,不能违反视图的WHERE条件的限制。
总结:因为违反了视图中的
where author_id = 1
子句,所以抛出异常; 利用with check option
约束限制,保证更新视图是在该视图的权限范围之内。 使用WITH CHECK OPTION
约束时,(不指定选项则默认是CASCADED) 可以使用CASCADED或者LOCAL选项指定检查的程度:CASCADED
:检查所有的视图,会检查嵌套视图及其底层的视图LOCAL
:只检查将要更新的视图本身,嵌套视图不检查其底层的视图
1.7 删除视图
删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据,也就是说不会影响基表
DROP VIEW IF EXISTS v_job;