跳转至

为什么 SQL 存储过程没有事务受欢迎?

这里通常是指:

很多系统更喜欢在应用层管理事务,而不是依赖存储过程。

原因主要有 5 个。

1️⃣ 可维护性差

存储过程代码写在数据库里:

问题:

  • 版本管理困难
  • 不容易做代码审查
  • 调试困难

而应用代码(Java / Go / Python):

  • 可以 Git 管理
  • CI/CD
  • 测试更容易

2️⃣ 与业务逻辑耦合

存储过程容易变成:

数据库 = 业务逻辑层

导致:

  • 数据库过重
  • 业务迁移困难

现代架构通常:

应用层负责业务
数据库负责存储

3️⃣ 可移植性差

不同数据库:

  • MySQL
  • PostgreSQL
  • Oracle Database
  • Microsoft SQL Server

存储过程语法 差异非常大

如果数据库迁移:

所有存储过程要重写

4️⃣ 扩展性差(分布式系统)

现代系统:

  • 微服务
  • 分布式数据库
  • 分布式事务

存储过程:

  • 只能在 单个数据库实例

难以适应:

  • 分库分表
  • 分布式事务

5️⃣ DevOps 和 CI/CD 不友好

现代开发流程:

Git → CI → 自动部署

而存储过程:

  • 修改数据库脚本
  • 部署流程复杂

很多团队选择:

应用层事务 + ORM

例如:

  • Hibernate
  • MyBatis

总结

存储过程不流行原因

  1. 可维护性差
  2. 业务耦合数据库
  3. 数据库迁移困难
  4. 不适合分布式系统
  5. DevOps 不友好