🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 什么是视图 通俗的讲,视图就是一条 SELECT 语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。 ### 视图的特性 视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变) 可以跟基本表一样,进行增删改查操作(有条件限制) ### 视图的作用 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性。 更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别。 ### 使用场合 权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如 联系方式,薪资等。 关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作。 ### 创建视图 语法如下: 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] 创建一个北京总公司(office_id = 1000)雇员的视图: CREATE OR REPLACE VIEW view_bj_employees (id, name, office) AS ( SELECT employee_id, employee_name, office_id FROM employee WHERE office_id = 1000 ); 从 *view_bj_employees* 视图中查询数据: SELECT * FROM view_bj_employees; SELECT * FROM view_bj_employees WHERE gender = '男'; SELECT * FROM view_bj_employees WHERE dept_id = 1000; // unknown column 'dept_id' in 'where clause' ### 修改视图 语法如下: ALTER 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] ### 查看视图 使用 show tables 命令不仅显示表的名字,同时也显示视图的名字,而不存在单独的显示视图的 show views 命令。 show tables; 使用 show create view 或者 desc 命令可以查看视图的定义: show create view pk_employee_view; desc view_bj_employees; ### 更新视图 更新视图是指通过视图来插入、更新、删除表数据,因为视图是虚表,其中没有数据。如果对视图插入、更新、删除记录,实际上是对基表执行相应的操作。 插入数据: INSERT INTO view_bj_employees (id, name, office) VALUES (null, '王大锤', 1000); 更新数据: UPDATE view_bj_employees SET name='王大炊' WHERE id = 58; UPDATE view_bj_employees SET name='王大炊' WHERE id = 17; // 记录不在视图范围内(office_id=1002),更新失败 删除数据: DELETE FROM view_bj_employees WHERE id = 58; 有的视图是可更新的,有的是不可更新的,是有条件限制的,所以视图最好当作查询使用,更多细节请参考官方文档。 ### 删除视图 语法如下: DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE] 删除 *view_bj_employees* 视图: drop view if exists view_bj_employees; 参考链接: - [MySQL视图讲解](http://www.2cto.com/database/201508/427083.html) - [Create View Syntax](https://dev.mysql.com/doc/refman/5.7/en/create-view.html) - [Updatable and Insertable Views](https://dev.mysql.com/doc/refman/5.7/en/view-updatability.html)