百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MySQL视图简介与操纵的介绍(附代码)
分享文章到:

MySQL视图简介与操纵的介绍(附代码)

发布时间:08/01 来源:未知 浏览: 关键词:
?本篇文章给大家带来的内容是对于MySQL视图简介与操纵的介绍(附代码),有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

本篇文章给大家带来的内容是对于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 ;

修改视图语法

修改视图名称可以先删除,再用雷同的语句新建。

#更新视图构造
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。

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)

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板