什么是视图?

一张虚表,和真实的表一样。视图包含一系列带有名称的行和列数据。视图是从一个或多个表中导出来的,我们可以通过insert,update,delete来操作视图。当通过视图看到的数据被修改时,相应的原表的数据也会变化。同时原表发生变化,则这种变化也可以自动反映到视图中。

视图具有以下优点:

简单化:看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化操作。经常被使用的查询可以制作成一个视图;

安全性:通过视图用户只能查询和修改所能见到的数据,数据库中其他的数据既看不见也取不到。数据库授权命令可以让每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定的行,列上;

逻辑数据独立性:视图可帮助用户屏蔽真实表结构变化带来的影响。

视图和表的区别以及联系是什么?

两者的区别:

视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是;

视图没有实际的物理记录,而表有;

表是内容,视图窗口;

表和视图虽然都占用物理空间,但是视图只是逻辑概念存在,而表可以及时对数据进行修改,但是视图只能用创建语句来修改 ;

视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL 语句的集合。从安全角度来说,视图可以防止用户接触数据表,因而不知道表结构 ;

表属于全局模式中的表,是实表。而视图属于局部模式的表,是虚表;

视图的建立和删除只影响视图本身,而不影响对应表的基本表。

两者的联系:

视图是在基本表之上建立的表,它的结构和内容都来自于基本表,它依赖基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本的抽象和逻辑意义上建立的关系。

一、创建视图

1、创建单表视图

#创建表

mysql> create table t(

-> quantity int,

-> price int

-> );

#插入数据

mysql> insert into t values(3,50);

#创建视图

mysql> create view view_t as select quantity,price,quantity*price as total from t;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from view_t; 查看视图中的数据

+----------+-------+-------+

| quantity | price | total |

+----------+-------+-------+

| 3 | 50 | 150 |

+----------+-------+-------+

1 row in set (0.01 sec)

2、创建多表视图

#创建基本表

mysql> create table student(

-> s_id int(3) primary key,

-> s_name varchar(30),

-> s_age int(3),

-> s_sex varchar(8)

-> );

Query OK, 0 rows affected (0.02 sec)

mysql> create table stu_info(

-> s_id int(3),

-> class varchar(50),

-> addr varchar(100)

-> );

Query OK, 0 rows affected (0.01 sec)

#插入数据

mysql> insert into stu_info values

-> (1,'erban','anhui'),

-> (2,'sanban','chongqing'),

-> (3,'yiban','shandong');

Query OK, 3 rows affected (0.01 sec)

Records: 3 Duplicates: 0 Warnings: 0

#创建视图

mysql> create view stu_class(id,name,class) as

-> select student.s_id,student.s_name,stu_info.class

-> from student,stu_info where student.s_id=stu_info.s_id;

3、查看视图的相关信息

#查看视图的表结构

mysql> desc stu_class;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | int(3) | NO | | NULL | |

| name | varchar(30) | YES | | NULL | |

| class | varchar(50) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

3 rows in set (0.00 sec)

#查看视图的基本信息

mysql> show table status like 'stu_class'\G

*************************** 1. row ***************************

Name: stu_class

Engine: NULL

Version: NULL

Row_format: NULL

Rows: NULL

Avg_row_length: NULL

Data_length: NULL

Max_data_length: NULL

Index_length: NULL

Data_free: NULL

Auto_increment: NULL

Create_time: NULL

Update_time: NULL

Check_time: NULL

Collation: NULL

Checksum: NULL

Create_options: NULL

Comment: VIEW

1 row in set (0.00 sec)

#查看视图的详细信息

mysql> show create view stu_class\G

*************************** 1. row ***************************

View: stu_class

Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `stu_class` AS select `student`.`s_id` AS `id`,`student`.`s_name` AS `name`,`stu_info`.`class` AS `class` from (`student` join `stu_info`) where (`student`.`s_id` = `stu_info`.`s_id`)

character_set_client: utf8

collation_connection: utf8_general_ci

1 row in set (0.00 sec)

#也可以直接查询information_schema库中的views表,来查看所有的视图

mysql> select * from information_schema.views where table_schema='test1'\G

#where后面指定的是一个库名,也就是查看test02这个库中的所有视图

4、修改视图

方法一:

mysql> create or replace view view_t as select * from t;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from view_t; 查看修改后的视图

+----------+-------+

| quantity | price |

+----------+-------+

| 3 | 50 |

+----------+-------+

1 row in set (0.00 sec)

方法二:

#修改指定视图的列名

mysql> alter view view_t(abc) as select quantity from t;

Query OK, 0 rows affected (0.00 sec)

#查看修改后的表结构

mysql> desc view_t;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| abc | int(11) | YES | | NULL | |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)

5、更新视图

1)update指令更新

#查看表以及视图的数据,其中quantity对应视图的abc字段

mysql> select * from t;

+----------+-------+

| quantity | price |

+----------+-------+

| 3 | 50 |

+----------+-------+

1 row in set (0.00 sec)

mysql> select * from view_t;

+------+

| abc |

+------+

| 3 |

+------+

1 row in set (0.01 sec)

mysql> update view_t set abc=5;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

#查看更新后的视图

mysql> select * from view_t;

+------+

| abc |

+------+

| 5 |

+------+

1 row in set (0.00 sec)

#查看更新后的表

mysql> select * from t;

+----------+-------+

| quantity | price |

+----------+-------+

| 5 | 50 |

+----------+-------+

1 row in set (0.00 sec)

2)insert指令更新

#查看表的数据

mysql> select * from t;

+----------+-------+

| quantity | price |

+----------+-------+

| 5 | 50 |

+----------+-------+

1 row in set (0.00 sec)

#查看视图的数据

mysql> select * from view_t;

+------+

| abc |

+------+

| 5 |

+------+

1 row in set (0.00 sec)

#向表中插入数据

mysql> insert into t values(3,5);

Query OK, 1 row affected (0.00 sec)

#查看视图的数据

mysql> select * from view_t;

+------+

| abc |

+------+

| 5 |

| 3 |

+------+

2 rows in set (0.00 sec)

#查看表的数据

mysql> select * from t;

+----------+-------+

| quantity | price |

+----------+-------+

| 5 | 50 |

| 3 | 5 |

+----------+-------+

3) delete指令删除表数据

#创建新的视图

mysql> create view view_t2(qty,price,total) as select quantity,price,quantity*price from t;

mysql> select * from view_t2;

+------+-------+-------+

| qty | price | total |

+------+-------+-------+

| 5 | 50 | 250 |

| 3 | 5 | 15 |

+------+-------+-------+

2 rows in set (0.00 sec)

#删除视图中的数据

mysql> delete from view_t2 where price=5;

Query OK, 1 row affected (0.00 sec)

#再次查看视图的数据

mysql> select * from view_t2;

+------+-------+-------+

| qty | price | total |

+------+-------+-------+

| 5 | 50 | 250 |

+------+-------+-------+

1 row in set (0.00 sec)

查看原表的数据

mysql> select * from t;

+----------+-------+

| quantity | price |

+----------+-------+

| 5 | 50 |

+----------+-------+

1 row in set (0.00 sec)

6、删除视图

mysql> drop view view_t;

mysql视图的特点有哪些_MySQL之视图相关推荐

  1. 创建mysql视图语法正确的是_MySQL创建视图的语法格式

    视图,具有简化查询语句.安全性和保证逻辑数据独立性等作用 创建视图的语法格式 视图中,包含SELECT查询的结果,因此,视图的创建基于SELECT语句,和已经存在的数据表,视图可以建立在一张表上,也可 ...

  2. mysql中的视图作用是什么意思_mysql数据库视图的作用是什么意思

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. php中使用mysql的视图_MYSQL中视图的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于MYSQL中视图的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.什么是视图 执行一条SQL,将结果集保存在一张虚拟表中 (相关 ...

  4. mysql 视图 教程_MySQL VIEW(视图)

    一.什么是视图? 视图就是存储下来的SQL SELECT语句,也可以说是虚拟的表(在MySQL中视图被当着表来用).这些数据可以是从一个或几个基本表(或视图)的数据.也可以是用户自已定义的数据.其实视 ...

  5. mysql视图_mysql之视图详解

    视图就是一个存在于数据库中的虚拟表. 视图本身没有数据,只是通过执行相应的select语句完成获得相应的数据. 目录 CREATE [OR REPLACE] [ALGORITHM = {UNDEFIN ...

  6. mysql学生成绩视图_mysql的视图

    # 转载请联系 假如你在管理着学生系统,有两张这样的表. mysql> select * fromstudent;+-----+-----------+--------+-------+---- ...

  7. mysql修改视图定义_MySQL修改视图

    修改视图是指修改 MySQL 数据库中存在的视图,当基本表的某些字段发生变化时,可以通过修改视图来保持与基本表的一致性. 基本语法 可以使用 ALTER VIEW 语句来对已有的视图进行修改. 语法格 ...

  8. mysql 视图会走索引吗_MySQL索引和视图

    一.什么是索引? 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度 ...

  9. mysql 5.6物化视图_mysql 物化视图

    如何让MySQL使用索引进行视图查询?简短的答案,提供了MySQL可以使用的索引. 在这种情况下,最佳索引可能是"覆盖"索引: ... ON highscores (player, ...

最新文章

  1. 「小程序JAVA实战」小程序我的个人信息页面开发(41)
  2. linux环境下运行open error,错误:运行OpenCL代码时clGetPlatformIDs -1001(Linux)
  3. Mac OS X:在标题栏上显示目录完整路径
  4. Linux驱动基础:msm平台,modem等framework加载
  5. 转账示例(二):service层面实现(本例采用QueryRunner来执行sql语句,数据源为C3P0)...
  6. helm istio k8s docker
  7. 华为p40pro怎么用鸿蒙,数码知识:华为p40pro是鸿蒙系统吗系统版本
  8. Eclipse和Tomcat绑定并且将上传资源到Tomcat上
  9. Android之Notification制作多媒体控制器
  10. 我的世界java什么村民卖地图_《我的世界》推出虚拟货币、商店 玩家可在店中卖地图...
  11. 字更大、页面更简单 淘宝长辈模式正式上线
  12. php 5.3新增的闭包语法介绍function() use() {}
  13. LVS——DR模式(负载均衡)
  14. java 银行管理系统怎么储存账户信息_银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能...
  15. 库论计量计算电池容量
  16. Recast源码解析(二):NavMesh导航网格生成原理(上)
  17. 列表、元组、字典、集合的基本使用和相关函数,基础的文件操作
  18. TypeScript散文
  19. 交通肇事逃逸会受到什么处罚
  20. 与QQ群中一屌人的聊天记录,颇有感触,贴出来,大家共勉一下哦

热门文章

  1. c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]
  2. java模拟器分辨率_创建AVD 模拟器大小/分辨率 调整
  3. 我的新浪微博欢迎大家互粉
  4. MSP430平台下实现Si4432的收发数据
  5. 影响计算机串口接收速度的因素,如何提高串口通信速度
  6. 22春天津大学《基础会计》在线作业二
  7. [附源码]java毕业设计网上书店管理系统
  8. HTML里的表格不能复制粘贴,wps表格不能复制粘贴
  9. 锐浪报表 Grid++Report 部件框 (长文字的) 跨页断句
  10. iOS边录边播放、实现试听