错误处理和事务
GORM 的传统 API 通常通过 .Error 获取错误。
事务用来保证一组数据库操作要么都成功,要么都失败。
一、基本错误处理
新增、更新、删除也一样:
二、记录不存在
需要导入:
三、检查影响行数
RowsAffected 适合判断更新或删除是否真的命中了数据。
四、为什么需要事务
比如创建文章时,同时要创建文章标签关系:
- 插入文章。
- 插入文章和标签的关系。
如果第 1 步成功,第 2 步失败,就会出现不完整数据。
事务可以保证这两步作为一个整体。
五、使用 db.Transaction
推荐使用 db.Transaction:
规则:
- 函数返回
nil,事务提交。 - 函数返回错误,事务回滚。
- 事务里面必须使用
tx,不要继续用外面的db。
六、手动事务
也可以手动控制:
优先用 db.Transaction,代码更短,也更不容易忘记回滚。
七、库存扣减示例
这里用一条更新语句完成库存判断和扣减,避免先查库存再扣减导致并发问题。
八、事务使用建议
事务不要包太久,不要在事务里调用慢接口或等待用户输入。

