0
0
0

第5章精讲:数据更新、视图与索引

2026-10-19
文章摘要
|

第 5 章:数据更新、视图与索引精讲

上一篇解决了"查",这一篇解决"改"和"优化":INSERT/UPDATE/DELETE 三件套,加上视图与索引两个重要概念。考试上它们以 SQL 小题和简答题形式出现,工作中它们是每天都在用的基本功。

一、插入数据 INSERT

-- 插入单行(值与列一一对应)
INSERT INTO Student(Sno, Sname, Ssex, Sage, Sdept)
VALUES('2026001', '张三', '男', 19, '计算机');

-- 只给部分列赋值(其余列取空值或默认值)
INSERT INTO Student(Sno, Sname) VALUES('2026002', '李四');

-- 把查询结果批量插入(常用于建备份表、汇总表)
INSERT INTO SC_backup(Sno, Cno, Grade)
SELECT Sno, Cno, Grade FROM SC WHERE Grade < 60;

注意:插入的值必须满足已定义的全部约束(主码不重复、外码引用存在、CHECK 通过),违反任何一条整条语句失败。

二、修改数据 UPDATE

-- 把C01课程全部成绩加5分
UPDATE SC SET Grade = Grade + 5 WHERE Cno = 'C01';

-- 同时修改多列
UPDATE Student SET Sage = Sage + 1, Sdept = '软件工程'
WHERE Sno = '2026001';

⚠️ 经典事故:UPDATE/DELETE 忘写 WHERE = 全表修改/删除。练习时养成先写 WHERE 再补 SET 的习惯。

三、删除数据 DELETE

DELETE FROM SC WHERE Grade < 40 AND Cno='C02';  -- 删除特定成绩
DELETE FROM SC;                                  -- 清空全部行(表结构还在)
DROP TABLE SC;                                   -- 整个表删掉(区别!)

参照完整性与删除:删除被引用表的行(如删 Student 里的学生,而 SC 里还有他的成绩)默认会报错,除非建表时声明了级联删除(ON DELETE CASCADE)。

四、视图(VIEW):虚表

定义与本质

视图是从基本表(或其他视图)导出的虚表:数据库里只存视图的定义(一段 SELECT),不存视图的数据,数据仍在基本表中。所以基本表数据一变,视图查出来的结果自动跟着变。

三大作用(简答必背)

  1. 简化操作:把复杂的多表查询定义成视图,之后一行 SQL 搞定;
  2. 提供数据逻辑独立性:基本表结构变化时,只需改视图定义,用户程序不变(呼应第 1 章的外模式/模式映像——视图就是外模式的具体实现);
  3. 安全性:向用户只开放视图(部分列/部分行),隐藏机密数据。

语法

-- 定义:计算机系学生视图
CREATE VIEW v_cs AS
SELECT Sno, Sname, Sage FROM Student WHERE Sdept='计算机';

-- 像表一样查询
SELECT Sno, Sname FROM v_cs WHERE Sage > 20;

-- 可更新视图(简单视图可以 INSERT/UPDATE/DELETE)
UPDATE v_cs SET Sage = Sage + 1 WHERE Sno='2026001';

DROP VIEW v_cs;

五、索引(INDEX):加速查询的目录

本质

索引类似图书目录:DBMS 在数据之外建立"索引键 → 存储位置"的有序结构(如 B+ 树),查询时先查索引再定位数据,避免全表扫描。

语法

CREATE INDEX idx_sname ON Student(Sname);        -- 建索引
CREATE UNIQUE INDEX idx_sno ON Student(Sno);     -- 唯一索引
DROP INDEX idx_sname;                            -- 删索引

代价(简答考点)

索引不是越多越好:

  • 优点:加快查询速度(尤其等值/范围查询)、加速表连接;
  • 缺点:占用额外存储空间;每次 INSERT/UPDATE/DELETE 都要同步维护索引,降低更新性能。

实践准则:经常出现在 WHERE、JOIN、ORDER BY 中的列适合建索引;频繁更新的表、小表、区分度低的列(如性别)不适合。

六、自测题

  1. 视图和基本表的区别?(虚表不存数据)
  2. 视图为什么能提供逻辑独立性?(它是外模式的实现)
  3. 索引的优缺点各说两条;
  4. 写出"删除 2026001 学生的全部选课记录"的 SQL;
  5. 写出"把计算机系全部学生年龄加 1"的 SQL。

下一篇进入第 6 章:规范化理论——判断你的表设计得好不好。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论

欢迎来到我的博客!