1、什么是视图
视图是一个虚表。视图可以进行查询、增加、修改、删除。进行修改、增加、删除,将影响基本表中的数据。
2、视图相对基本表的优势
1》简单化:看到的就是想要的字段列,可以简化后续查询。
2》安全性:通过视图用户只能查询和修改他们所能看到的数据。
3》逻辑数据独立性:屏蔽基本表结构变化带来的影响。
3、创建视图
//1、algorithm表示视图选择的算法,undefined表示MySQL自动选择算法;merge表示将使用的视
//图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分;temptable表示将
//视图的结果存入临时表,然后用临时表来执行语句。
//2、[with [cascaded | local] check option]表示视图在更新时保证在视图的权限范围之内
//cascaded与local为可选参数,cascaded为默认值,表示更新视图时要满足所有相关视图和表
//的条件;local表示更新视图时满足该视图本身定义的条件即可。
//3、创建的视图默认属于当前数据库,如果要创建属于其他数据库的视图,则db_name.view_name
create [or replace] [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]
1》在单表上创建视图,可以给视图指定不同的字段名,创建的时候会与基本表对齐。
mysql> create view v_test as select * from test; Query OK, 0 rows affected (0.00 sec) mysql> select * from v_test; +----+-------+--------+--------+----------+------+ | id | name | deptId | salary | t_time | str | +----+-------+--------+--------+----------+------+ | 1 | Lucy | NULL | 1000 | 10:28:33 | NULL | | 2 | Lura | NULL | 1200 | 10:28:33 | NULL | | 3 | Kevin | NULL | 1500 | 10:28:33 | NULL | | 4 | Nancy | NULL | 1000 | 22:08:38 | NULL | | 5 | Bob | NULL | 1200 | 22:08:38 | NULL | +----+-------+--------+--------+----------+------+ 5 rows in set (0.01 sec) mysql> desc v_test; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(10) | NO | | 0 | | | name | varchar(25) | NO | | NULL | | | deptId | int(11) | YES | | NULL | | | salary | float | YES | | NULL | | | t_time | time | YES | | NULL | | | str | varchar(4) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 6 rows in set (0.00 sec) mysql> desc test; +--------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+----------------+ | id | int(10) | NO | PRI | NULL | auto_increment | | name | varchar(25) | NO | | NULL | | | deptId | int(11) | YES | | NULL | | | salary | float | YES | | NULL | | | t_time | time | YES | | NULL | | | str | varchar(4) | YES | | NULL | | +--------+-------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec) mysql>
2》在多表上创建视图,基本同单表的操作。
3》查看视图:权限show view;方法有describe、show table status、show create view、views表中查询视图信息。
1>describe / desc
describe / desc view_name;
2>show table status
show table status like 'view_name';
3>show create view
show create view view_name;
4>views表中查询视图信息
select * from information_schema.views;
mysql> select * from information_schema.views where table_name='v_test' G *************************** 1. row *************************** TABLE_CATALOG: def TABLE_SCHEMA: mybatis TABLE_NAME: v_test VIEW_DEFINITION: select `mybatis`.`test`.`id` AS `id`,`mybatis`.`test`.`nam e` AS `name`,`mybatis`.`test`.`deptId` AS `deptId`,`mybatis`.`test`.`salary` AS `salary`,`mybatis`.`test`.`t_time` AS `t_time`,`mybatis`.`test`.`str` AS `str` f rom `mybatis`.`test` CHECK_OPTION: NONE IS_UPDATABLE: YES DEFINER: root@localhost SECURITY_TYPE: DEFINER CHARACTER_SET_CLIENT: gbk COLLATION_CONNECTION: gbk_chinese_ci 1 row in set (0.00 sec) mysql>
4、修改视图,两种方式
1》create or replace view
//与创建视图的语句格式一致
create [or replace] [algorithm ={undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]
2》使用alter语句修改
alter [algorithm ={undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]
5、更新视图
1》insert
insert into view_name ...
2》delete
delete from view_name ...
3》update
update view_name set ...
当视图包含如下内容时,视图的更新操作将不能被执行:
1>>视图中不包含基表中被定义为非空的列。
2>>在定义视图的select语句后的字段列表中使用使用了数学表达式。
3>>在定义视图的select语句后的字段列表中使用聚合函数。
4>>在定义视图的select语句中使用了distict、union、top、group by或having子句。
6、删除视图
drop view [if exists] view_name [,view_name] ... [restrict | cascade]