数据库系统概论4 - 更新与视图 期末速成课笔记

该笔记总结自 《数据库系统概论》4小时期末不挂科!期末突击|核心考点|案例解析 的选集4 更新与视图

速通SQL语句可以直接看:

SQL 十四分钟速成班!没错不要怀疑,资料库语法比中午决定吃什么还要简单!个人学习笔记

目录


数据更新

插入子查询结果

sql 复制代码
INSERT INTO <表名>[<属性列1>[,<属性列2>]]
子查询;

例:对于本校每一个专业,求学生平均年龄,并把结果存入数据库

sql 复制代码
CREATE TABLE Student
( Smajor VARCHAR(20),
Ayg_age INT);
INSERT INTO Student(Smajor, Avg_age)
SELECT Smajor, AVG(age)
FROM Student
GROUP BY Smajor;

修改操作

sql 复制代码
UPDATE <表名>
SET <列名> = <表达式>[,<列名> = <表达式>]
[WHERE<条件>];

例1:将学生20250001的出生日期改为2007年5月2日

sql 复制代码
UPDATE Student
SET Sbrithday = '20070502'
WHERE Sno = '20250001';

例2:将2025年第2学期选修课号为10086课程所有学生的总课程学分数减少5分

sql 复制代码
UPDATE Course
SET XF = XF - 5
WHERE Ctime = 20252 AND Cno = '10086';

例3:将计算机科学与技术专业学生成绩置零

sql 复制代码
UPDATE Course
SET grade = 0
WHERE SC.Sno IN (
SELECT Sno FROM Student
WHERE Smajor = 'CS'
)

完整性约束

关系数据库管理系统在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则

  1. 实体完整性
  2. 主码不允许修改
  3. 用户定义的完整性
    • NOT NULL约束
    • UNIQUE约束
    • 值域约束

数据删除

sql 复制代码
DELETE FROM <表名>
[WHERE <条件>];

WHERE子句:指定要删除的元组,缺省表示要删除表中的全部元组,但表的定义仍在字典中。

例1:删除学号为20250001的学生记录

sql 复制代码
DELETE FROM Student
WHERE Sno = '20250001';

例2:删除所有的学生选课记录

sql 复制代码
DELETE FROM SC;

例3:删除智能科学与技术专业所有学生的选课记录

sql 复制代码
DELETE FROM SC
WHERE Sno IN (
  SELECT Sno
  FROM Student
  WHERE Smajor = 'IS');

空值

  1. 定义:空值就是"不知道"、"不存在"或"无意义"的值。
  2. 一般有以下几种情况:
    1. 该属性应该有一个值,但目前不知道它的具体值
    2. 该属性不应该有值
    3. 由于某种原因不便于填写

注意:空值是一个很特殊的值,含有不确定性。对关系运算带来特殊的问题,需要做特殊的处理。

空值的判断

使用 IS NULL 和 IS NOT NULL

sql 复制代码
SELECT * FROM Student
WHERE Sname IS NULL OR Sno IS NULL OR Ssex IS NULL;

空值约束

  1. 在创建基本表时,如果属性定义(或者域定义)为NOT NULL约束,则该属性不能取空值。
  2. 主码的属性不能取空值

视图

视图的特点

  • 虚表,是从一个或几个基本表(或视图)导出的表
  • 只存放视图的定义,而不存放视图对应的数据
  • 基本表中的数据发生变化,从视图中查询出的数据也随之改变

建立与删除视图

sql 复制代码
CREATE VIEW <视图名>[(<列名> [,<列名>])]
AS <子查询>
[WITH CHECK OPTION]; -- 确保通过视图执行的数据修改操作不会导致被修改的行从视图中消失

DROP VIEW <视图名>[CASCADE];
-- CASCADE表示级联删除

【例题1】建立软件工程专业学生的视图,并要求进行插入、修改和删除操作时仍需保证该视图只有软件工程专业的学生。

sql 复制代码
CREATE VIEW A
AS
SELECT * FROM Student
WHERE Smajor = 'SE'
WITH CHECK OPTION;

【例题2】建立软件工程专业选修了999号课程的学生的视图(包括学号、姓名、成绩属性)。

sql 复制代码
CREATE VIEW B
AS
SELECT Student.Sno, Sname, grade
FROM Student, SC
WHERE SC.Sno = Student.Sno AND Smajor = 'SE' AND Cno = '999';

【例题3】建立软件工程专业选修了999号课程且成绩在90分以上的学生的视图(包括学号、姓名、成绩属性)

sql 复制代码
CREATE VIEW C
AS
SELECT Student.Sno, Sname, grade
FROM B
WHERE grade >= 90;

【例题4】将学生的学号、姓名、专业、年龄定义为一个视图。

sql 复制代码
CREATE VIEW D(Sno, Sname, Smajor, Sage)
AS
SELECT Sno, Sname, Smajor, Sage
FROM Student;

【例题5】将Student表中所有女生记录定义为一个视图。

sql 复制代码
CREATE VIEW E
AS
SELECT * FROM Student
WHERE Ssex = '女';

【例题6】删除视图ST_haha以及用它创建的视图。

sql 复制代码
DROP VIEW ST_haha CASCADE;

视图查询

与基本表的查询基本相同

例:在信息管理与信息系统专业学生的视图中,找出年龄小于等于20岁的学生(包括学生的学号和出生日期)

sql 复制代码
SELECT Sno, Sbirthdate
FROM IS_Student
WHERE (extract(year from current_date)-extract(year from Sbirthdate) ) <= 20;

视图更新

更新视图:通过视图来插入(INSERT)、删除(DELETE)和修改(UPDATE)数据。

视图的更新操作通过视图消解,转换为对基本表的更新操作

为防止用户有意无意地对不属于视图范围内的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION子句

在视图上增、删、改数据时,关系数据库管理系统会检查视图定义中的条件,若不满足条件则拒绝执行该操作

【例题1】将信息管理与信息系统专业学生视图IS_Student中学号为"20180005"的学生姓名改为"刘新奇"。

sql 复制代码
UPDATE IS_Student
SET Sname = '刘新奇'
WHERE Sno = '20180005';

【例题2】向信息管理与信息系统专业学生视图IS_Student中插入一个新的学生记录(20180207,赵新,男,2001-7-19)

sql 复制代码
INSERT INTO IS_Student(Sno, Sname, Ssex, Sbri)
VALUES ('20180207', '赵新', '男', '2001-7-19');

【例题3】删除信息管理与信息系统专业学生视图IS_Student中学号为"20180207"的记录。

sql 复制代码
DELETE FROM IS_Student
WHERE Sno = '20180207';

视图的作用

  1. 视图能够简化用户的操作
  2. 视图使用户能以多种角度看待同一数据
  3. 视图对重构数据库提供了一定程度的逻辑独立性
  4. 视图能够对机密数据提供安全保护
  5. 适当利用视图可以更清晰地表达查询
相关推荐
无心水3 小时前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师
蒸蒸yyyyzwd3 小时前
邓明 Agent 系统面试-意图识别学习笔记
笔记·学习
这个DBA有点耶4 小时前
信创场景下数据同步软件怎么选?对比开源CDC与原生闭环工具的结构性差异
数据库·mysql·架构
多客:duokelijie4 小时前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署
PingCAP4 小时前
平凯星辰上榜!2026 年胡润全球独角兽企业
数据库
PingCAP4 小时前
轨道交通 AFC 系统升级,平凯 Loop 把跨部门协同变成可追溯闭环
数据库
java_logo6 小时前
Docker 部署 CloudBeaver:轻松搭建网页数据库管理平台
数据库·docker·容器·数据库管理·dbeaver·轩辕镜像·cloudbeaver
Zhao-Jichao6 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李6 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议