MySQL视图详解

我写本文主要目的,是在网上看见了

在这里插入图片描述

所以,文本主要探讨的问题如下,验证结果在最后面

一、修改视图,基表会跟着改吗?答案:会改变

二、修改基表,视图会变化吗?答案:会改变

视图概述

视图是由数据库中的一个表或多个表导出的虚拟表,其作用是方便用户对数据的操作。

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。同样对视图的更新,会影响到原来表的数据。

视图是存储在数据库中的查询的SQL语句,它主要出于两种原因:安全原因,视图可以隐藏一些数据,例如,员工信息表,可以用视图只显示姓名、工龄、地址,而不显示社会保险号和工资数等;另一个原因是可使复杂的查询易于理解和使用。这个视图就像一个“窗口”,从中只能看到你想看的数据列。这意味着你可以在这个视图上使用SELECT *,而你看到的将是你在视图定义里给出的那些数据列。

一、准备工作,创建一张表,并添加数据

# 创建一个 用户表
CREATE TABLE `user` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	age INT(11)
);
# 写三个用户
INSERT INTO `USER` (`name`,`age`) VALUES ('张三',18),('李四',20),('王麻子',200);

1、查看数据库文件有什么

.frm 文件保存表的结构

.ibd 文件保存表的数据

在这里插入图片描述

二、视图的基本操作

1、创建视图

# 创建一个视图
CREATE VIEW test_view1 as SELECT * FROM USER;

1.1、查看文件

发现只有一个 test_view1.frm 的文件,说明视图只有结构没有数据,是一个虚拟表,其内容由查询定义。

在这里插入图片描述

2、查询视图

# 就跟普通的查询语句一样
SELECT * FROM test_view1;

3、修改视图

修改视图,就是删除上一个记录,并录入当前记录,有两种实现语句,分别是:CREATE OR REPLACE VIEWALTER VIEW

# 新创建一个 动物表
CREATE TABLE `animal` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	`master` INT(11)
);

# 写三个动物
INSERT INTO animal (`name`,`master`) VALUES ('小白',1),('小黑',1),('小黄',2);

# 修改方式1
# 修改值,并取别名
CREATE OR REPLACE VIEW test_view1 (id1,NAME1,MASTER1) AS SELECT id,NAME,MASTER FROM animal;
# 查看
SELECT * FROM test_view1;
#+-----+--------+---------+
#| id1 | NAME1  | MASTER1 |
#+-----+--------+---------+
#|   1 | 小白   |       1 |
#|   2 | 小黑   |       1 |
#|   3 | 小黄   |       2 |
#+-----+--------+---------+
#3 rows in set (0.00 sec)

# 修改方式1
# 修改回user表
ALTER VIEW test_view1 AS SELECT * FROM user;
# 查看
SELECT * FROM test_view1;
#+----+-----------+------+
#| id | name      | age  |
#+----+-----------+------+
#|  1 | 张三      |   18 |
#|  2 | 李四      |   20 |
#|  3 | 王麻子    |  200 |
#+----+-----------+------+
#3 rows in set (0.00 sec)

4、删除视图

DROP VIEW test_view1;

一、修改视图,基表会跟着改吗?

答案:会改变,证明如下

# 创建一个 用户表
CREATE TABLE `user` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	age INT(11)
);
# 创建一个 动物表
CREATE TABLE `animal` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	`master` INT(11)
);
# 写三个用户
INSERT INTO `USER` (`name`,`age`) VALUES ('张三',18),('李四',20),('王麻子',200);
# 写三个动物,并对应张三和李四两个用户
INSERT INTO animal (`name`,`master`) VALUES ('小白',1),('小黑',1),('小黄',2);
# 查找所有的用户          --------第一个查询语句---------
SELECT * FROM user;
# 创建一个多表查询的视图
CREATE VIEW test_view as SELECT u.*,a.name animal_name FROM `USER` u,animal a WHERE u.id = a.master;
# 查看视图               --------第二个查询语句---------
SELECT * FROM test_view;
# 修改视图
UPDATE test_view SET NAME = '我擦' WHERE id = 1;
# 再次查看视图,发现更改了   --------第三个查询语句---------
SELECT * FROM test_view;
# 再次查看用户,发现更改了   --------第四个查询语句---------
SELECT * FROM user;
# 删除 视图和 表格
DROP VIEW test_view;
DROP TABLE user;
DROP TABLE `animal`;

第一个查询

在这里插入图片描述

第二个查询

在这里插入图片描述

第三个查询

在这里插入图片描述

第四个查询

在这里插入图片描述

二、修改基表,视图会变化吗?

答案:会改变,证明如下

# 创建一个 用户表
CREATE TABLE `user` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	age INT(11)
);
# 创建一个 动物表
CREATE TABLE `animal` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	`master` INT(11)
);
# 写三个用户
INSERT INTO `USER` (`name`,`age`) VALUES ('张三',18),('李四',20),('王麻子',200);
# 写三个动物,并对应张三和李四两个用户
INSERT INTO animal (`name`,`master`) VALUES ('小白',1),('小黑',1),('小黄',2);
# 创建一个多表查询的视图
CREATE VIEW test_view as SELECT u.*,a.name animal_name FROM `USER` u,animal a WHERE u.id = a.master;
# 查看视图                  --------第一个查询语句---------
SELECT * FROM test_view;
# 修改animal表
UPDATE animal SET NAME = '我也不知道取什么名字了' WHERE id = 1;
# 再次查看视图,发现更改了         --------第二个查询语句---------
SELECT * FROM test_view;
# 再次查看animal,发现更改了         --------第三个查询语句---------
SELECT * FROM animal;
# 删除 视图和 表格
DROP VIEW test_view;
DROP TABLE user;
DROP TABLE `animal`;

第一个查询

在这里插入图片描述

第二个查询

在这里插入图片描述

第三个查询

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我认不到你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值