千家信息网

什么是MySQL视图及如何操作

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文主要给大家介绍什么是MySQL视图及如何操作,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下什么是MySQL视图及如何操作吧。1、准备工作在
千家信息网最后更新 2026年11月01日什么是MySQL视图及如何操作

本文主要给大家介绍什么是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;#外键为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。

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视图及如何操作,很多读者朋友肯定多少有一定的了解,如需获取更多的行业知识信息 ,可以持续关注我们的行业资讯栏目的。

视图 数据 查询 更新 用户 结构 语句 客户 权限 不同 余额 语法 可以通过 名称 实际 数据库 笔者 结论 行业 变化 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 互联网 科技 致骋互联网科技 奇酷互联网络科技公司 互联网科技logo设计 互联网科技有限公司 翻译 现代科技和互联网有关系吗 互联网科技创新服务 重庆互联网医院沙龙医盟信息科技 互联网科技商业 银川新华互联网科技学校联系电话 如何创新互联网科技 晋城互联网科技 四川慕妮娅互联网科技有限公司 特约风豹互联网科技为什么扣费 互联网领先科技宣传片 北京互联网科技类企业分布 易租星互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 六子台科技互联网展会 湖北九亚互联网络科技有限公司 博彦科技互联网金融 互联网女皇 腾讯科技 唐信互联网科技 大连 广西互联网科技孵化中心 四川慕妮娅互联网科技有限公司 世界互联网领先科技成果获奖 产业互联网科技服务公司 互联网科技手机排行榜 如何强化互联网金融科技
0