本篇文章给大家带来的内容是关于MySQL视图简介与操作的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
1、准备工作
在%ign%ignore_a_1%re_a_1%数据库中创建两张表balance(余额表)和customer(客户表)并插入数据。
create table customer( id int(10) primary key, name char(20) not null, role char(20) not null, phone char(20) not null, sex char(10) not null, address char(50) not null)ENGINE=InnoDB DEFAULT CHARSET=utf8;#外键为customerIdcreate table balance( id int(10) primary key, customerId int(10) not null, balance DECIMAL(10,2), foreign key(customerId) references customer(id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
向客户表和余额表中各插入3条数据。
insert into customer values(0001,"xiaoming",'vip1','12566666','male','江宁区888号');insert into customer values(0002,"xiaohong",'vip10','15209336760','male','建邺区888号');insert into customer values(0003,"xiaocui",'vip11','15309336760','female','新街口888号');insert into balance values(1,0001,900.55);insert into balance values(2,0002,900.55);insert into balance values(3,0003,10000);
2、视图简介
视图可以简单理解成虚拟表,它和数据库中真实存在数据表不同,视图中的数据是基于真实表查询得到的。视图和真实表一样具备相似的结构。真实表的更新,查询,删除等操作,视图也支持。那么为什么需要视图呢?
a、提升真实表的安全性:视图是虚拟的,可以只授予用户视图的权限而不授予真实表的权限,起到保护真实表的作用。
b、定制化展示数据:基于同样的实际表,可以通过不同的视图来向不同需求的用户定制化展示数据。
c、简化数据操作:适用于查询语句比较复杂使用频率较高的场景,可以通过视图来实现。
……
需要说明一点的是:视图相关的操作需要用户具备相应的权限。以下操作使用root用户,默认用户具备操作权限。
创建视图语法
create view as ;
修改视图语法
修改视图名称可以先删除,再用相同的语句创建。
#更新视图结构alter view as ;#更新视图数据相当于更新实际表,不适用基于多表创建的视图update ....
注意:部分视图的数据是无法更新,也就是无法使用update,insert等语句更新,比如:
a、select语句包含多个表
b、视图中包含having子句
c、试图中包含distinct关键字
……
删除视图语法
drop view
3、视图的操作
基于单表创建视图
mysql> create view bal_view -> as -> select * from balance;Query OK, 0 rows affected (0.22 sec)
创建完成后,查看bal_view的结构和记录。可以发现通过视图查询到数据和通过真实表查询得到的结果完全一样。
#查询bal_view的结构mysql> desc bal_view;+------------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+------------+---------------+------+-----+---------+-------+| id | int(10) | NO | | NULL | || customerId | int(10) | NO | | NULL | || balance | decimal(10,2) | YES | | NULL | |+------------+---------------+------+-----+---------+-------+3 rows in set (0.07 sec)#查询bal_view中的记录mysql> select * from bal_view;+----+------------+----------+| id | customerId | balance |+----+------------+----------+| 1 | 1 | 900.55 || 2 | 2 | 900.55 || 3 | 3 | 10000.00 |+----+------------+----------+3 rows in set (0.01 sec)
通过创建视图的语句不难得出结论:当真实表中的数据发生改变时,视图中的数据也会随之改变。那么当视图中的数据发生改变时,真实表中的数据会变化吗?来实验一下,修改id=1的客户balance为2000。
追梦flash企业网站管理模板A系列11.0
追梦A系列(11.0版本,以下11.0均简称为A)是针对企业网站定制设计的,模板采用全新AS3.0代码编辑,拥有更快的运行和加载速度,A系列模板主要针对图片展示,拥有简洁大气展示效果,并且可以自由扩展图片分类,同时还拥有三个独立页面介绍栏目,一个新闻栏目,一个服务介绍栏目,一个幻灯片展示和flv视频播放栏目。A系列模板对一些加载效果进行了修改,包括背景的拉伸模式以及标题的展示方式等都进行了调整,同
0 查看详情
mysql> update bal_view set balance=2000 where id=1;Query OK, 1 row affected (0.05 sec)Rows matched: 1 Changed: 1 Warnings: 0
来看一下真实表balance中的数据。
mysql> select * from bal_view where id=1;+----+------------+---------+| id | customerId | balance |+----+------------+---------+| 1 | 1 | 2000.00 |+----+------------+---------+1 row in set (0.03 sec)
结论:视图表中的数据发生变化时,真实表中的数据也会随之改变。
基于多表创建视图
创建视图cus_bal,共两个字段客户名称和余额。
mysql> create view cus_bal -> (cname,bal) -> as -> select customer.name,balance.balance from customer ,balance -> where customer.id=balance.customerId;Query OK, 0 rows affected (0.05 sec)#查看cus_bal中的数据mysql> select * from cus_bal;+----------+----------+| cname | bal |+----------+----------+| xiaoming | 2000.00 || xiaohong | 900.55 || xiaocui | 10000.00 |+----------+----------+3 rows in set (0.28 sec)
修改视图
将cus_bal视图中的cname改成cusname。
mysql> alter view cus_bal -> (cusname,bal) -> as -> select customer.name,balance.balance from customer ,balance -> where customer.id=balance.customerId;Query OK, 0 rows affected (0.06 sec)#查看修改后视图结构。mysql> desc cus_bal;+---------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+---------------+------+-----+---------+-------+| cusname | char(20) | NO | | NULL | || bal | decimal(10,2) | YES | | NULL | |+---------+---------------+------+-----+---------+-------+2 rows in set (0.00 sec)
修改基于多表创建的视图
mysql> insert into cus_bal(cusname,bal) values ("ee",11);ERROR 1393 (HY000): Can not modify more than one base table through a join view 'rms.cus_bal'
删除视图
删除视图cus_bal
drop view cus_bal;mysql> drop view cus_bal;Query OK, 0 rows affected (0.00 sec)
【相关推荐:MySQL教程】
以上就是MySQL视图简介与操作的介绍(附代码)的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1079658.html
微信扫一扫
支付宝扫一扫