• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL视图简介及基本操作教程

    前言

    视图是数据库系统中一种非常有用的数据库对象。MySQL 5.0 之后的版本添加了对视图的支持。

    认识视图

    视图是一个虚拟表,其内容由查询定义。同真实表一样,视图包含一系列带有名称的列和行数据,但视图并不是数据库真实存储的数据表。

    视图是从一个、多个表或者视图中导出的表,包含一系列带有名称的数据列和若干条数据行。

    视图并不同于数据表,它们的区别在于以下几点:

    视图与表在本质上虽然不相同,但视图经过定义以后,结构形式和表一样,可以进行查询、修改、更新和删除等操作。

    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笔记之视图的使用详解
    • MySQL中视图的使用及多表INNER JOIN的技巧分享
    • MySQL中索引与视图的用法与区别详解
    • mysql视图原理与用法实例小结
    • 基于mysql事务、视图、存储过程、触发器的应用分析
    • Mysql事项,视图,函数,触发器命令(详解)
    • MySQL视图原理与基本操作示例
    • mysql视图功能与用法实例分析
    • Mysql数据库高级用法之视图、事务、索引、自连接、用户管理实例分析
    • mysql视图之创建可更新视图的方法详解
    上一篇:完美解决phpstudy安装后mysql无法启动(无需删除原数据库,无需更改任何配置,无需更改端口)直接共存
    下一篇:MySQL自定义函数和存储过程示例详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL视图简介及基本操作教程 MySQL,视图,简介,及,基本操作,