mysql学习之路_视图
视图
视图:view是一种有结构的但是没有结构来源的虚拟表,虚拟表的结构来源不是自己定义的而是从对应的基表中产生(来源)
创建视图
基本语法:
Create view 视图名字 as select 语句
可以是普通查询,也可以是连接查询,联合查询,子查询。
创建单表视图:
基表只有一个
例:create view my_view as select *from my_class;
创建多表查询
基表有多个
查看视图:
查看视图结构
视图是一张虚拟表,表的查看方式适用于
视图:show tables ,desc 表名
Show create table 表名\G
视图与表还是有一个关键字的区别:view
查看表(视图)的创建语句的时候可以使用view关键字
视图一旦创建:系统就会在视图对应的数据库文件夹下创建一个对应的结构文件:frm文件
使用视图
使用视图:主要是为了子查询:将视图做为表一样
查询:视图的执行:其实本质就是执行封装的select语句
修改视图:
视图本身不可修改,但是视图的来源可以修改
修改视图:修改视图本身的来源语句(select 语句)
Alter view视图名字 as 新的select语句
例:alter view my_view as select id,name,age,sex from my_stu;
删除视图
Drop view 视图名字;
视图的意义
1,视图可以节省sql语句:将一条复杂的查询语句使用视图进行保存,以后可以直接对视图进行操作;
2,数据安全:视图操作是主要针对查询,如果对视图结果进行处理(删除)不会影响基表数据(相对安全)
3,视图往往是在大型项目中使用,而且是多系统使用,对外提供有效有用的数据隐藏关键(无用的)数据,数据安全。
4,视图对外提供友好型,不同的视图提供不同的数据,对外好像是专门设计
5,视图可以更好地进行权限控制
视图数据操作
视图可以进行很多数据写操作:但是有限制,将数据直接在视图上进行操作
新增数据
数据新增直接对数据进行新增
1,多表数据不能进行新增操作
2,可以向单表视图插入数据,但是视图中包含的字段必须有基表所不能为空(或者没有默认值)字段
3,视图可以向基表插入数据(不应该给权限)
删除数据
1,多表视图不能删除数据
2,单表视图可以删除数据(对基表进行操作)‘delete from my_view2 where id=2’
更新数据
理论上单表与多表视图都可以更新数据库
Update my_view1 set id=3 where id=2;
更新限制:with check option 如果对视图在新增的时候,限定了某个字段有限制;那么在对视图进行数据更新操作之后,数据依然可以被实体查询出来,否则不更新。
例:select * from my_stu where age>30 with check option---表视图数据来源年龄不能>30岁,with check option 决定更新的时候不能将age >30改成<30。
视图算法
系统对视图以及外部查询视图select语句的一种解析方法。
视图算法有三种
1,undefind:未定义(默认的),这不是实际使用算法,推卸责任的算法告诉系统,视图没有定义算法,自己看着办吧!
2,Temptable:临时算法,系统应该先执行视图的select语句,后执行外部查询语句
3,Merge:合并算法,系统应该先将视图对应的select语句与外部查询视图的select语句进行合并;然后执行(效率高,常态);
算法指定:创建视图的时候
Create algorithm =指定算法 view 视图名字 as select 语句;
视图算法的选择
如果视图的select语句中包含一个查询子句(五子句???)而且很有肯比外部查询语句要靠后,一定要使用temptable 其他情况不指定。
mysql学习之路_视图的更多相关文章
- mysql学习之路_事物_存储过程_备份
数据备份与还原 备份:将当前已有的数据保留. 还原:将已经保留的数据恢复到对应表中 为什么要做数据备份 1,防止数据丢失,被盗,误操作 2,保护数据记录 数据备份还原方式有多种:数据表备份 单表数据备 ...
- mysql学习之路_基础知识
Mysql php阶段将数据库分为三个阶 基础阶段: mysql数据库的基本操作(增删改查),以及一些高级操作(视图,触发器,函数,存储过程等),PHP操作没有sql数 ...
- mysql学习之路_联合查询与子查询
联合查询 联合查询:将多次查询(多条select语句)在记录上进行拼接(字段不会增加). 语法:多条select语句构成,每条select语句获取的字段必须严格一致(但是字段类型无关). Select ...
- mysql学习之路_外键
回顾4 连接查询: 连接多张表到一起,不管记录数如何,字段数一定会增加. 分类:内连接,外连接.自然连接,交叉连接, 交叉连接:cross join (笛卡尔积) 内连接:inner join,左右两 ...
- mysql学习之路_高级数据操作
关系 将实体与实体的关系,反应到最终数据表的设计上来,将关系分为三种,一对多,多对多,多对多. 所有关系都是表与表之间的关系. 一对一: 一张表的一条记录一定只对应另外一张表的一条记录,反之亦然. 例 ...
- mysql学习之路_字段类型与属性2
字段属性: 主键,唯一键,自增长. 主键: Primary key 主要的键,一张表只能有一个字段能使用对应的键,用来唯一约束该字段里面的数据不能重复,称之为主见. 一张表最多只有一个主键. 增加主键 ...
- mysql学习之路_字段类型与属性
回顾 数据库基本知识:关系型数据库与非关系型数据库 关系型数据库:安全(磁盘) 非关系型数据库:高效(内存) 关系型数据库:建立在关系模型上的数据库, 数据结构:二维表(浪费空间) 数据库操作指令:s ...
- mysql学习之路_连接查询
回顾 列属性:主键,自增长,唯一键. 关系:一对一,一对多,多对多 三层范式: 1NF:字段设计必须符合原子性 2NF:不存在部分依赖(没有复合主键) 3NF:不存在传递依赖(实体单独成表) 逆规范化 ...
- mysql学习之路_乱码问题
中文数据问题: 中文数据问题本质就说字符集问题, 计算机只识别二进制,人类识别符号:需要友谊个二进制与字符对应关系(字符集). 报错:服务器没有识别对应的四个字节. 服务器认为的数据是utf—8,一个 ...
随机推荐
- Xcode9 打包ipa(导出ipa测试包)时总是意外退出
今天用xcode9,打包ipa总是意外退出. 正处在测试阶段,所以打的也是测试包 ,路径是:Product -> Archive -> Export -> Save for Ad H ...
- [leetcode]151. Reverse Words in a String翻转给定字符串中的单词
Given an input string, reverse the string word by word. Example: Input: "the sky is blue", ...
- powerdesigner中实现PDM到MYSQl数据库的转换
一.使用PowerDesigner制作建库脚本 1.设计CDM(Conceptual Data Model) 2.选择 Tools -> Generate Physical Data Model ...
- golang 简单的实现内 网 穿 透,用户访问本地服务。
一.功能描述: 客户端通过访问外网服务器上指定端口,间接访问自已本地的内网服务. 二.原理图如下: 三.实现代码如下: server.go代码: package main; import ( &quo ...
- css背景图充满屏幕
代码: body { /* 加载背景图 */ background: url(resource/inv_bg.png); /* 背景图不平铺 */background-repeat: no-repea ...
- SprinMVC中文件上传只在内存保留一份拷贝
背景:web项目里经常有上传文件的模块,某些特殊场景下,上传文件的人不希望在服务器留存一份原始文件,这个时候就需要把文件放到内存里了. 笔者调试了一下springmvc里面的CommonsMultip ...
- 在windows7中配置ant环境变量
假设本地以及安装好JDK并且配置好环境变量. 新建/修改系统环境变量 ANT_HOME D:\develop\apache-ant-1.10.3 PATH %ANT_HOME%\bin ...
- encode/decode/bytes
python3中如何将字符型转换成utf-8格式的bytes类型 str_me = '字符是我'.encode('utf-8') print(str_me) >>:b'\xe5\xad\x ...
- BZOJ4033或洛谷3177 [HAOI2015]树上染色
BZOJ原题链接 洛谷原题链接 很明显的树形\(DP\). 因为记录每个点的贡献很难,所以我们可以统计每条边的贡献. 对于每一条边,设边一侧的黑点有\(B_x\)个,白点有\(W_x\),另一侧黑点有 ...
- Lazarus IOCP 移植
delphi下面有一个高性能IOCP库,是俄国人写的,在下将其移植到了lazarus下面, lazarus 版本 1.0.12 ,需要的下载 和indy相比较,indy开发的一个web服务器,cpu占 ...