MySQL----视图
来源:互联网 发布:java 计算逻辑表达式 编辑:程序博客网 时间:2024/06/06 16:54
- 概述
- 视图的创建
- 视图的查询
- 视图的更新
- 可更新视图
- 插入数据
- 修改数据
- 删除数据
- 修改视图ALTER
- 删除视图DROP
- 概述
概述
MySQL的视图功能可以向用户屏蔽MySQL的表连接语句,直接创建出一个视图,会使程序变得更加简洁
视图的创建
语法格式就不写了,直接上例子
在test数据库中,创建一个cs_kc表,用来展示计算机专业学生的信息
CREATE OR REPLACE VIEW cs_kc AS SELECT xs.学号, 课程号, 成绩 FROM xs, xs_kc WHERE xs.学号 = xs_kc.学号 AND xs.专业 = '计算机' WITH CHECK OPTION;
看到了吧,上面做了一个表连接,连接的是xs表与xs_kc表
在创建视图时,SELECT子句是有限制的
- (1)定义视图的用户必须对所参照的表或视图有查询权限;
- (2)不能包含FROM字句的子查询;
- (3)不能引用系统或用户变量;
- (4)不能使用预处理语句参数;
- (5)在定义中引用的表或视图必须存在;
- (6)若引用的不是当前数据库的表或视图时,要在表或视图前加上数据库的名称;
- (7)若视图定义中允许使用ORDER BY,但是,若果从特定视图进行了选择,而该视图使用了
具有自己ORDER BY的语句,则视图定义中的ORDER BY将被忽略; - (8)对于SELECT语句中的其他选项或字句,若视图中也包含了这些选项,则效果未定义。
- 例如:
如果在视图定义中包含LIMIT字句,而SELECT语句使用了自己的LIMIT字句,MySQl对使用哪个LIMIT未作定义;
- 例如:
视图的查询
比如说我们现在要查询刚才所创建cs_kc表
就这样操作:
SELECT 学号, 课程号 FROM cs_kc;
很简单吧,哈哈哈,跟表的查询非常相似
对CS_KC视图进行分组查询
SELECT 学号, 课程号 FROM cs_kc GROUP BY 学号;
GROUP BY学号之后,课程号就只保留了第一行
敲黑板
- 在使用视图查询时,如果视图对应的基表中添加了新的字段,那么在试图中是看不到这个变化的,也就是说,在视图中查询不到基表中新增的列的信息
- 如果基表被删除,那么视图也就GG了,因为视图本来就是从基表来的
视图的更新
可更新视图
我们可以通过视图来更新它的基表,但并不是所有的视图能进行这种操作,只有满足了下面这个条件的视图才可以更新:
- 视图中的行和基表中的行之间必须有一一对应的关系
如果在创建视图时出现了下面这几种结构,那么这样的视图就是不可更新视图
- (1)聚合函数
- (2)DISTINCT 子句
- (3)GROUP BY 子句
- (4)ORDER BY 子句
- (5)HAVING 子句
- (6)UNION 子句
- (7)位于选择列表中的子查询
- (8)FROM 子句中包含多个表
- (9)SELECT语句中引用了不可更新视图
- (10)WHERE 子句中的子查询,引用FROM子句中的表
- (11)ALGORITHM选项指定为TEMPTABLE(临时表会使视图成为不可更新视图)
插入数据
首先创建一个视图cs_xs
CREATE OR REPLACE VIEW cs_xs AS SELECT * FROM xs WHERE 专业 = '计算机' WITH CHECK OPTION;
这里要解释一下为什么要在后面加一个WITH CHECK OPTION 子句
- WITH CHECK OPTION 子句会在更新数据的时候检查新数据是否符合视图定义中WHERE 子句的限制条件,就是说在对视图cs_xs进行修改时, WITH CHECK OPTION 子句会判断插入的记录是否符合 专业 = ‘计算机’这一限制条件
- WITH CHECK OPTION 子句只能和可更新视图一起使用
然后向该视图中插入一条新记录
INSERT INTO cs_xs VALUES('081255', '李牧', '计算机', 1, '1994-10-14', 50, NULL);
再来看一下视图cs_xs和基表xs有何变化
- 视图cs_xs
- 修改前
- 修改后
- 修改前
- 基表xs
- 修改前
- 修改后
- 修改前
注意注意:
- 要向想对一个视图使用INSERT子句,自定义视图时,SELECT 语句中必须包含FROM 子句中指定表的所有不能为空的列。所以,我认为,直接使用FROM *是最保险的
修改数据
UPDATE
删除数据
DELETE
上面这两个都没有什么好注意的,只要是满足了可更新视图条件的视图,就可以大胆的用,就像操作TABLE一样
修改视图(ALTER)
ALTERVIEW和CREATEVIEW语法差不多,具体Please Baidu 嘻嘻嘻
给一个例子:
ALTER VIEW cs_xsAS SELECT 学号, 姓名, 总学分 FROM xs WHERE 专业 = '计算机';
执行结果:
修改前
修改后
使用ALTER将视图精简为了三列
删除视图(DROP)
语法格式,这个比较短,说一下吧
DROP VIEW [IF EXISTS] VIEW_NAME [, view_name] ... [RESTRICT | CASCADE]
- 最后那俩选项,可以写也可以不写,没什么影响,我也不知道他俩是什么意思(哈哈哈哈……)
最后来个结尾,把前面创建的视图删掉
DROP VIEW cs_xs;
被删掉了。。。
终于写完了
阅读全文
0 0
- MySql视图
- mysql视图
- mysql 视图
- mysql 视图
- mysql视图
- MySQL -- 视图
- MySQL 视图
- MYSQL 视图
- mysql 视图
- mysql 视图
- MySQL视图
- MySQL 视图
- mysql视图
- mysql视图
- mysql视图
- mysql视图
- MySql视图
- mysql 视图
- Tensorflow深度学习笔记(十一)--利用Inception做图像识别
- 应用系统之间数据传输的几种方式
- SpringBoot+SpringData整合开发
- Caffe源码:conv_im2col
- LeetCode-Easy刷题(31) Single Number
- MySQL----视图
- 发布Jar包到Maven中央仓库
- 03-CSS认识
- 进程间通信(一)
- DirectShow视频渲染的源、目标矩阵
- hibernate简单的crud
- 水池数目
- (十三)SpringBoot整合当当网config toolkit管理配置信息
- LeetCode-Easy刷题(32) Linked List Cycle