本文详细讲述了在mysql中有关数据视图的创建、修改、查询等知识并拓展基础语法及注意事项和特点
一、什么是数据视图
数据视图(View)在数据库领域中,是一种虚拟的表(逻辑表)。它并不在数据库中存储实际的数据值,而是存储了定义该视图的SQL查询语句。当用户查询视图时,系统会根据这个查询语句动态生成对应的数据。
视图具有以下特点和用途:
1. 简化复杂查询:视图可以封装复杂的SQL查询,使得用户可以通过简单的查询语句来获取所需的数据4。
2. 提供数据抽象:视图可以隐藏数据的复杂性,只展示用户感兴趣的部分,提高数据的安全性。
3. 更新数据:在某些情况下,通过视图可以间接更新基础表的数据,但这通常受到诸多限制。
4. 保持数据一致性:当基础表的数据发生变化时,视图中的数据也会自动更新。
二、了解视图的基本语法
1. 创建视图
使用CREATE VIEW语句来创建一个视图。语法如下:
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
- view_name 是你要创建的视图的名称。
- SELECT 语句定义了视图的内容。它可以从一个或多个表中检索数据,并包含任何必要的条件或连接。
示例:
假设我们有一个employees表,我们想创建一个只显示薪资超过5000的员工的视图:
CREATE VIEW high_paid_employees AS
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary > 5000;
2、修改视图
可以使用ALTER VIEW来修改视图。在MySQL中,通常的做法是:
- 使用DROP VIEW删除旧视图。
- 使用CREATE VIEW创建新视图。
拓展:ALTER VIEW的语句使用
ALTER VIEW view_name
AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
提示:一般SQL Server或Oracle才能支持ALTER VIEW语句的使用
3、 删除视图
使用DROP VIEW语句来删除一个视图。语法如下:
DROP VIEW view_name;
- view_name 是你要删除的视图的名称。
示例:
删除之前创建的high_paid_employees视图:
DROP VIEW high_paid_employees;
4、查询视图
查询视图就像查询普通的表一样。你可以使用SELECT语句从视图中检索数据。
示例:
查询high_paid_employees视图中的数据:
SELECT * FROM high_paid_employees;
总实例:
1. 创建和查询视图
(1)创建视图L_view1
假设读者表名为Readers,包含字段reader_id(读者编号)、name(姓名)、class_name(类名)、borrow_days(可借天数)和borrow_count(可借数量)。另外,假设还有一个表与读者可借天数和数量相关,这里为了简化我们假设它们都在Readers表中。
CREATE VIEW L_view1 AS
SELECT reader_id, name, class_name, borrow_days, borrow_count
FROM Readers;
(2)从L_view1视图中查询
SELECT reader_id, name, borrow_days, borrow_count
FROM L_view1;
(3)创建视图L_view2
假设借阅表名为Borrowings,包含字段borrowing_id(借阅号)、book_id(书号)、reader_id(读者编号)、borrow_date(借阅日期)和return_date(还书日期)。同时假设有一个读者信息表Readers,包含字段name(姓名)。
CREATE VIEW L_view2 AS
SELECT Borrowings.borrowing_id, Borrowings.book_id, Readers.name AS reader_name, Borrowings.borrow_date, Borrowings.return_date
FROM Borrowings
JOIN Readers ON Borrowings.reader_id = Readers.reader_id;
(4)从L_view2视图中查询
SELECT *
FROM L_view2
WHERE return_date IS NULL;
(5)创建视图L_view3
在创建这个视图时,假设Borrowings表中有一个字段borrow_status(借阅状态)。
CREATE VIEW L_view3 AS
SELECT *
FROM Borrowings
WHERE borrow_status IN ('借阅', '已还')
WITH CHECK OPTION;
2. 通过视图操作数据
注意:通过视图插入、更新或删除数据可能会受到限制,这取决于视图的定义以及基础表的结构和约束。如果视图包含了复杂的连接、聚合函数或子查询,或者视图使用了WITH CHECK OPTION,那么通过视图进行的数据操作可能会失败。此外,某些数据库系统可能不允许直接通过视图进行数据操作。
(1)在L_view3视图中插入一条记录
如果视图允许插入操作(这通常取决于基础表的结构和视图的定义),你可以这样做:
INSERT INTO L_view3 (borrowing_id, book_id, reader_id, borrow_date, return_date, borrow_status)
VALUES ('100010', '411112', '2001', '2020-10-18', NULL, '借出');
(2)修改L_view2
UPDATE L_view2
SET borrow_date = CURDATE() -- 假设你的数据库支持CURDATE()函数来获取当前日期
WHERE borrowing_id = '100001';
注意:CURDATE()是MySQL中的函数,其他数据库系统可能有不同的函数来获取当前日期。
(3)删除视图L_view3中的记录
DELETE FROM L_view3
WHERE return_date IS NOT NULL;