为什么 SQL 存储过程没有事务受欢迎?¶
这里通常是指:
很多系统更喜欢在应用层管理事务,而不是依赖存储过程。
原因主要有 5 个。
1️⃣ 可维护性差¶
存储过程代码写在数据库里:
问题:
- 版本管理困难
- 不容易做代码审查
- 调试困难
而应用代码(Java / Go / Python):
- 可以 Git 管理
- CI/CD
- 测试更容易
2️⃣ 与业务逻辑耦合¶
存储过程容易变成:
导致:
- 数据库过重
- 业务迁移困难
现代架构通常:
3️⃣ 可移植性差¶
不同数据库:
- MySQL
- PostgreSQL
- Oracle Database
- Microsoft SQL Server
存储过程语法 差异非常大。
如果数据库迁移:
4️⃣ 扩展性差(分布式系统)¶
现代系统:
- 微服务
- 分布式数据库
- 分布式事务
存储过程:
- 只能在 单个数据库实例
难以适应:
- 分库分表
- 分布式事务
5️⃣ DevOps 和 CI/CD 不友好¶
现代开发流程:
而存储过程:
- 修改数据库脚本
- 部署流程复杂
很多团队选择:
例如:
- Hibernate
- MyBatis
总结¶
存储过程不流行原因
- 可维护性差
- 业务耦合数据库
- 数据库迁移困难
- 不适合分布式系统
- DevOps 不友好