本篇文章给人人带来的内容是关于MySQL视图简介与操纵的引见(附代码),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。
1、准备工作
在MySQL数据库中建立两张表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; #外键为customerId create 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 <select语句>;
修正视图语法
修正视图称号能够先删除,再用雷同的语句建立。
#更新视图构造 alter view <视图称号> as <select语句>; #更新视图数据相当于更新现实表,不实用基于多表建立的视图 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。
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视图简介与操纵的引见(附代码)的细致内容,更多请关注ki4网别的相干文章!