MySQL 视图View/Transparent

视图:Select语句的执行方法,数据库只存储视图定义本身,而不保存视图的执行结果。

  • 执行方式:类似于C语言中:内联函数,将语句替换到对应位置
  • 使用方法:可以看作一个TABLE
  • 作用:
    1:隐藏数据,结合权限管理机制,可以提供更加灵活的安全控制

创建视图

CREATE VIEW v AS <query expression>
  • case:
USE world;
CREATE VIEW v_select AS 
SELECT district, SUM(population)
FROM city
WHERE countrycode = 'CHN'
GROUP BY district
HAVING SUM(population) > 5000000
ORDER BY SUM(population) DESC
LIMIT 5 OFFSET 0;
  • 补充:I_S (Information_Schema)保证表的安全(不让用户接触元数据)
    每次数据库启动,会自动在内存中生成I_S,生产查询MySQL部分元数据信息视图
    – 类似于C语言中的typedef:保存元数据的查询方法, I_S中保存的都是视图
  • I_S.tables 常用信息介绍 – 作用:保存所有表的数据字典信息(一部分元数据)
DESC TABLES;	#查询视图信息: tables中存了MySQL中所有表的情况:全局的统计
TABLE_SCHEMA	#表所在的库
TABLE_NAME  	#表名
ENGINE 			#表的引擎
TABLE_ROWS		#表的数据行数(不是实时的值,Write_Back)
AVG_ROW_LENGTH 	#平均行长度
DATA_LENGTH 	#表使用的存储空间大小(不是实时的值)
INDEX_LENGTH 	#表中索引使用的存储空间大小
DATA_FREE 		#表中是否有碎片(频繁DELETE会产生碎片)

可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。

提示:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。

更新视图

满足以下条件的视图可更新:
1:FROM子句只有一个数据库关系
2:SELECT子句只包含关系的属性名(不包含表达式,聚集函数,DISTINCT=》无法反推:比如没法通过SUM(col)值知道col都包含哪些元素,不可逆性)
3:满足主键约束,参照完整性约束
4:查询中不含有GROUP BY或HAVING (同2)

可以对视图使用DUDATE、INSERT、DROP、DELETE操作,同时使用WITH CHECK OPTION做自定义完整性检查,防止出现越权(修改本视图看不到的数据)等等

发布了316 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42347617/article/details/105352009