MySQL数据库-视图

视图是数据库中的虚拟表,基于复杂的SELECT查询创建,提供了一种简化查询和增强数据安全的方式。视图可以隐藏原始表的结构和细节,确保数据独立性,同时通过设置权限限制用户访问特定数据。在示例中,创建了一个city_country视图,用于合并city和country表的信息,方便查询。视图可以被更新,但会直接影响到基础数据表,因此修改需谨慎。视图的删除则通过DROP VIEW语句完成。

视图

视图的概念

作用

视图的好处

简单

安全

数据独立

视图数据准备 (样例)

视图的创建  (view)

视图的查询

语法

查询视图基本演示

视图的修改

修改视图表中的数据

修改视图表结构

删除视图

总结


视图

视图的概念

视图是一种虚拟存在的数据表,这个虚拟的表并不在数据库中实际存在。

作用

是将一些比较复杂的查询语句的结果,封装到一个虚拟表中。后期再有相同复杂查询时,直接查询这张虚拟表即可。

就是为了简化操作!

说白了,视图就是将一条SELECT查询语句的结果封装到了一个虚拟表中,所以我们在创建视图的时候,工作重心就要放在这条SELECT查询语句上。

例如:

有两张数据表city 与 country

需求:查询城市信息和所属国家信息

SELECT c1.id,c1.name,c2.name 
FROM city c1,country c2
WHERE c1.cid=c2.cid; 

查询结果如下: 

但是在开发中,如果要较为经常的使用这些信息,那么将会经常使用到上述的SQL语句,这样子较为繁琐。故我们可以使用视图,将上述查询出来的结果封装到一个视图中,下次再使用就直接从视图中取数据即可,不用再使用上述的SQL查询语句了! 

视图的好处

简单

对于使用视图的用户不需要关心表的结构、关联条件和筛选条件。因为这张虚拟表中保存的就是已经过滤好条件的结果集

安全

视图可以设置权限 , 致使访问视图的用户只能访问他们被允许查询的结果集

数据独立

一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响

视图数据准备 (样例)

-- 创建db7数据库
CREATE DATABASE db7;
​
-- 使用db7数据库
USE db7;
​
-- 创建country表
CREATE TABLE country(
    id INT PRIMARY KEY AUTO_INCREMENT,
    country_name VARCHAR(30)
);
-- 添加数据
INSERT INTO country VALUES (NULL,'中国'),
			(NULL,'美国'),
			(NULL,'俄罗斯');
​
-- 创建city表
CREATE TABLE city(
    id INT PRIMARY KEY AUTO_INCREMENT,
    city_name VARCHAR(30),
    cid INT, -- 外键列。关联country表的主键列id
    CONSTRAINT cc_fk1 FOREIGN KEY (cid) REFERENCES country(id)
);
-- 添加数据
INSERT INTO city VALUES (NULL,'北京',1),
			(NULL,'上海',1),
			(NULL,'纽约',2),
			(NULL,'莫斯科',3);

创建了一个country表和city表。 

       

视图的创建  (view)

创建视图语法

CREATE VIEW 视图名称 [(列名列表)] AS 查询语句;

(1)普通多表查询,查询城市和所属国家

SELECT 
	c1.id,
	c1.city_name,
	c2.country_name
FROM
	city c1,
	country c2
WHERE 
	c1.cid=c2.id;

(2)创建一个视图,将查询出来的结果保存到这张虚拟表中

经常需要查询这样的数据,就可以创建一个视图

CREATE VIEW city_country (city_id,city_name,country_name) AS
SELECT 
	c1.id,
	c1.city_name,
	c2.country_name
FROM
	city c1,
	country c2
WHERE 
	c1.cid=c2.id;

效果如下: 

 

视图的查询

与正常的数据表的查询类似!

语法

SELECT * FROM 视图名称;

查询视图基本演示

(1)查询视图。查询这张虚拟表,就等效于查询城市和所属国家

SELECT * FROM city_country; 

(2)查询所有数据表,视图也会查询出来

SHOW TABLES;

(3)查询视图创建

SHOW CREATE VIEW city_country;

视图的修改

修改视图表中的数据

UPDATE 视图名称 SET 列名=值 WHERE 条件;

(1)修改视图表中的城市名称北京为北京市

UPDATE city_country SET city_name='北京市' WHERE city_name='北京';

(2)查询视图与city表

SELECT * FROM city_country;

SELECT * FROM city;

 

显然修改视图的时候,实际表的数据也修改了

修改视图表结构

ALTER VIEW 视图名称 [(列名列表)] AS 查询语句;

(1)修改视图2的列名city_id为id

ALTER VIEW 
	city_country (id,city_name,country_name)
AS 
	SELECT c1.id,c1.city_name,c2.country_name
	FROM city c1,country c2
	WHERE c1.cid=c2.id;

显然之前的city_id已经被修改为id了

SELECT * FROM city_country;

删除视图

DROP VIEW [IF EXISTS] 视图名称; ​

DROP VIEW IF EXISTS city_country;

总结

视图是一种虚拟存在的数据表

这个虚拟的表并不在数据库中实际存在

说白了,视图就是将一条SELECT查询语句的结果封装到了一个虚拟表中,所以我们在创建视图的时候,工作重心就要放在这条SELECT查询语句上

视图的好处:简单、安全、数据独立

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

涅槃重升-up

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

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

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

打赏作者

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

抵扣说明:

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

余额充值