1. 视图的概念
- 视图是一种虚拟存在的数据表
- 这个虚拟的表并不在数据库中实际存在
- 视图的作用是将一些比较复杂的查询语句的结果,封装到一个虚拟表中。后期再有相同复杂查询时,直接查询这张虚拟表即可
- 视图存在问题:修改视图会修改源表中的数据,在源表中删除字段后,可能会影响视图的使用
2. 数据准备
-- 创建db5数据库
CREATE DATABASE db_view;
-- 使用db5数据库
USE db_view;
-- 创建country表
CREATE TABLE country(
id INT PRIMARY KEY AUTO_INCREMENT, -- 国家id
NAME VARCHAR(30) -- 国家名称
);
-- 添加数据
INSERT INTO country VALUES (NULL,'中国'),(NULL,'美国'),(NULL,'俄罗斯');
-- 创建city表
CREATE TABLE city(
id INT PRIMARY KEY AUTO_INCREMENT, -- 城市id
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);
3. 创建和查询视图
-- 创建city_country视图,保存城市和国家的信息(使用指定列名)
CREATE VIEW city_country (city_id,city_name,country_name) AS
SELECT
c1.id,
c1.name,
c2.name
FROM
city c1,
country c2
WHERE
c1.cid=c2.id;
-- 查询视图
SELECT * FROM city_country;
4. 修改和删除视图
-- 修改视图表数据
-- 修改视图数据,将北京修改为深圳。(注意:修改视图数据后,源表中的数据也会随之修改)
UPDATE city_country SET city_name='深圳' WHERE city_name='北京';
-- 修改视图表结构
-- 将视图中的country_name修改为name
ALTER VIEW city_country (city_id,city_name,NAME) AS
SELECT
c1.id,
c1.name,
c2.name
FROM
city c1,
country c2
WHERE
c1.cid=c2.id;
-- 删除city_country视图
DROP VIEW IF EXISTS city_country;
5. 数据库的备份和还原
1. 将指定数据库备份到.sql文件中:
mysqldump -u root -p db_view > /home/temp/mysql_copy/db_view.sql
2. 登录mysql数据库
mysql -u root -p
3. 删除已经备份的数据库,创建同名的数据库并使用该数据库
drop database db_view;
create database db_view;
use db_view;
4. 导入文件执行:source 备份文件路径,还原数据库
source /home/temp/mysql_copy/db_view.sql;
如有错误欢迎留言评论,2021年7月11日 羽露风