1.什么是MySQL视图呢?
视图是虚拟表,是从数据库中一个或多个表中导出来的表,其内容由查询定义;同真实表(基表)一样,视图包含一系列带有名称的字段和记录,在使用视图时动态生成。视图的数据变化会影响到基表,基表的数据变化也会影响到视图(insert、update、delete
)。
另外,创建视图需要有create view
权限,并且查询的列有select
权限,使用create or update or alter
修改视图,还需要有相应的drop
权限。
视图可以查询、修改和删除,但不允许通过视图向基表插入数据。
视图的做用
对其中所引用的基础表来说,视图的做用类似于筛选,定义视图的筛选可以来自当前或者其他数据库的一个或多个表,也可以是其他视图;通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
使用视图的优点
-
安全性,视图的安全性可以防止未授权用户查看特定的行或列,使有权限用户只能看到表中特定行的方法,如下:
-
在表中增加一个标志用户名的列。
-
建立视图,使用户只能看到标有自己用户名的行。
-
把视图授权给其他用户。
-
-
简单性,看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
-
逻辑数据独立性,视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,程序一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立。
如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而使应用程序可以不动。
如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。
如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而使应用程序可以不动。
如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而使数据库可以不动。
2. 创建视图
mysql> CREATE VIEW v1 AS -> SELECT * FROM city WHERE countrycode='CHN' LIMIT 10; Query OK, 0 rows affected (0.01 sec)
查看视图
mysql> select * from v1; +------+--------------------+-------------+--------------+------------+ | ID | Name | CountryCode | District | Population | +------+--------------------+-------------+--------------+------------+ | 1890 | Shanghai | CHN | Shanghai | 9696300 | | 1891 | Peking | CHN | Peking | 7472000 | | 1892 | Chongqing | CHN | Chongqing | 6351600 | | 1893 | Tianjin | CHN | Tianjin | 5286800 | | 1894 | Wuhan | CHN | Hubei | 4344600 | | 1895 | Harbin | CHN | Heilongjiang | 4289800 | | 1896 | Shenyang | CHN | Liaoning | 4265200 | | 1897 | Kanton [Guangzhou] | CHN | Guangdong | 4256300 | | 1898 | Chengdu | CHN | Sichuan | 3361500 | | 1899 | Nanking [Nanjing] | CHN | Jiangsu | 2870300 | +------+--------------------+-------------+--------------+------------+
修改视图
ALTER VIEW 视图名称 as SQL语句;
删除视图
DROP VIEW 视图名称;
information_schema是视图库(虚拟库): USE information_schema; SHOW TABLES; -- 返回了一堆视图
# 查看数据库中的所有视图
-- information_schema.TABLES中常用的字段 DESC infoRmation_schema.TABLES; TABLE_SCHEMA -- 库名 TABLE_NAME -- 表名 ENGINE -- 引擎 TABLE_ROWS -- 表行数 AVG_ROW_LENGTH -- 表中行平均长度(字节) INDEX_LENGTH -- 索引的占用空间大小(字节)
# show 命令大全
show databases; -- 查看所有数据库 show tables; -- 查看当前库的所有表 show TABLES FROM -- 查看某个指定库下的表 show create database world -- 查看建库语句 show create table world.city -- 查看建表语句 show grants for root@'localhost' -- 查看用户的权限信息 show charset; -- 查看字符集 show collation -- 查看校对规则 show processlist; -- 查看数据库连接情况 show index from -- 表的索引情况 show status -- 数据库状态查看 show STATUS LIKE '%lock%'; -- 模糊查询数据库某些状态 show VARIABLES -- 查看所有配置信息 show variables LIKE '%lock%'; -- 查看部分配置信息 show engines -- 查看支持的所有的存储引擎 show engine innodb status\G -- 查看InnoDB引擎相关的状态信息 show binary logs -- 列举所有的二进制日志 show master status -- 查看数据库的日志位置信息 show binlog evnets in -- 查看二进制日志事件 show slave status \G -- 查看从库状态 show RELAYLOG EVENTS -- 查看从库relaylog事件信息 desc (show colums from city) -- 查看表的列定义信息 -- 不知道更多,请使用help help show