文章目录
一、视图及视图更新
简单地说,视图可以看成是一个窗口,它所反映的是一个表或若干表的局部数据,可以简化查询语句。视图一经定义,用户就可以把它当作表一样来查询数据。
但视图和基本表不同,视图是一个虚表,即视图储存的是查询语句而不是查询结果。一个视图既可以定义在基本表上,也可以定义在另一个视图上。一个视图可在几个表或视图上建立,一个表或视图也可建立多个视图。
DROP TABLE IF EXISTS student;
CREATE TABLE student
(
student_id INT PRIMARY KEY,
student_name VARCHAR(50) UNIQUE,
gender ENUM ('Male', 'Female') DEFAULT 'Male',
major VARCHAR(50) NOT NULL,
birthdate DATE NOT NULL
);
INSERT INTO student (student_id, student_name, gender, major, birthdate)
VALUES (1, 'Alice', 'Female', 'Computer Science', '2000-05-15'),
(2, 'Andrew', 'Male', 'Engineering', '1999-09-20'),
(3, 'Maria', 'Female', 'Mathematics', '2001-03-10'),
(4, 'Samantha', 'Female', 'Physics', '2002-01-25'),
(5, 'Michael', 'Male', 'Biology', '1998-11-05'),
(6, 'Jessica', 'Female', 'History', '1997-06-30'),
(7, 'William', 'Male', 'Computer Science', '1996-04-15'),
(8, 'John', 'Male', 'Computer Science', '1995-08-08');
# 创建计算机专业的学生视图
CREATE OR REPLACE VIEW computer_science_students AS
SELECT *
FROM student
WHERE major = 'Computer Science';
SELECT * FROM computer_science_students;
# +----------+------------+------+----------------+----------+
# |student_id|student_name|gender|major |birthdate |
# +----------+------------+------+----------------+----------+
# |1 |Alice |Female|Computer Science|2000-05-15|
# |7 |William |Male |Computer Science|1996-04-15|
# |8 |John |Male |Computer Science|1995-08-08|
# +----------+------------+------+----------------+----------+
行列子集视图是指从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主键的视图。在关系数据库中,基本表的行列子集视图一般是可更新的。但对于其他一些些视图来说,由于对视图的更新不能通过视图消解唯一地、有意义地转换成对相应的基本表的更新,因此这些视图不允许更新。
这些不能更新的视图主要包括:
- 视图是由两个以上基本表导出的。
- 视图的字段来自于字段表达式、聚集函数或常数。
- 视图定义中含有
GROUP BY
子句或DISTINCT
短语。 - 视图定义中含有嵌套查询,并且内层查询的
FROM
子句中涉及的表也是导出该视图的基本表。 - 在另一个不允许更新的视图上定义的视图。
二、数据库三级模式结构
数据库的三级模式:
- 数据库模式:又称逻辑模式,是对数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,模式描述的是数据的全局逻辑结构。
- 数据库外模式:又称为子模式或用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,通常是模式的子集,一个数据库可以有多个外模式。
- 数据库内模式:又称存储模式,是对数据库物理结构和存储方式的描述,是数据在数据库内部的表现形式,一个数据库只有一个内模式。
数据库的两级映像:外模式/模式的映像、模式/内模式的映像,分别保证了数据库中数据的逻辑独立性和物理独立性。
数据库三级模式与两级映象的好处:
- 方便了用户使用,简化了用户接口
- 实现了数据的独立性(物理数据独立、逻辑数据独立)
- 有利于数据共享
- 有利于数据的安全和保密