第9章 事务、权限与可编程对象


第9章 · 事务、权限与可编程对象:守护数据的一方阵地

本章要回答的三个问题:转账扣款成功、入账还没执行就断电,数据库怎么保证两步要么都成、要么都不算?为什么实习生不该有 DROP 权限,GRANT 与 REVOKE 怎么按角色精确放权?什么样的逻辑值得从应用层搬进数据库,存储过程、触发器、动态 SQL 各自的适用与滥用边界在哪里?查询之外,这是 SQL 工程能力的另一半。

为什么会有这一章

前八章都在"把数据取对",本章解决"把数据守对"。第 2 章末尾用过一次事务后悔药,但那只是感性认识:为什么 BEGIN 之后改动可以整批撤销?并发之下两个事务同时改一行会怎样?ACID 四个字母各自对应什么机制?这些答案决定你敢不敢在生产环境写 UPDATE。

权限与可编程对象则是工程团队的日常:新人入职要开只读账号、报表服务要开指定库的查询权、误授权的事故复盘里 REVOKE 是止损动作;而"库存扣减不能为负"这类规则写在应用层就存在被绕过的可能,搬进数据库(约束、触发器、存储过程)才是最后防线——但搬进去的代价是逻辑分散、调试困难,边界的拿捏正是本节的分量所在。

读完能解决什么

  • 说出 ACID 四特性各自解决的问题与大致实现机制(日志回滚、锁与隔离级别);
  • 用 BEGIN/COMMIT/ROLLBACK/SAVEPOINT 组合出安全的批处理流程,解释 autocommit 的行为;
  • 按最小权限原则用 GRANT 建只读账号、按库按表授权,用 REVOKE 止损;
  • 判断一段业务规则该放应用层还是数据库层,说出三层的判断依据;
  • 写出最简存储过程与触发器,理解它们的调试与性能代价;
  • 说明动态 SQL 的拼接风险与参数化预防的思路。

各节怎么分工

节 回答哪个问题 关键产出
9.1 事务与 ACID 怎么同生共死 四特性拆解、保存点、隔离级别速览
9.2 权限管理 谁能动什么 GRANT/REVOKE 全流程、最小权限实践
9.3 存储过程、触发器与动态 SQL 规则搬进数据库吗 可编程对象选型、动态 SQL 风险

先决条件

  • 第 2 章的事务自救初体验(本章是它的完整理论版);
  • 第 1 章的 DCL/TCL 家族划分在本章全面展开。

本章知识点清单

  • 能逐字说出 ACID 的四特性并各配一个业务场景说明其缺失的后果;
  • 能解释回滚依赖"改动前的旧值被记录在案"这一机制;
  • 能用 SAVEPOINT 在长事务里设置部分回滚点并写出示例;
  • 能说出四个标准隔离级别与读脏、不可重复读、幻读的对应关系;
  • 能写出创建用户与授权的语句,按 SELECT/INSERT/UPDATE/DELETE 粒度分配;
  • 能解释为什么生产应用账号不该用 root、报表账号只给 SELECT;
  • 能写出最简触发器(如下单扣库存)并说出触发器的隐性调试代价;
  • 能说明动态 SQL 注入的成因与参数化查询的防御原理。

本章概念全景

查询能力决定你能做什么,守护能力决定你敢做什么。生产环境的分界线就在这一章。

往下走到哪

数据守住了,最后一章回答"怎么跑得快":索引怎么把全表扫描变成定点查找,EXPLAIN 的每一行在说什么,以及登上台阶顶端之后的进阶路线图。带着本章的守护能力向上爬,速度才有意义——没有安全感的快,只是加速靠近事故。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U