目录
事务(Transaction)
事务是数据库操作中的一个逻辑单元,由一系列的数据库操作组成。这一系列操作要么全部执行并且提交,要么全部回滚,确保数据的一致性和完整性。事务具有以下四个主要特性,通常被称为ACID特性:
- 原子性(Atomicity):事务作为一个整体,所有的操作要么全部执行,要么全部不执行,不会出现部分执行的情况。
- 一致性(Consistency):在事务开始和结束时,数据库的状态都是一致的,符合预定的约束条件。
- 隔离性(Isolation):一个事务的执行不影响另一个事务的执行,除非另一个事务等待第一个事务完成。
- 持久性(Durability):一旦事务提交,所做的修改就会被永久保存在数据库中,不会因系统故障或崩溃而丢失。
在Go语言中,使用database/sql包进行事务的基本步骤如下:
- 开始事务:使用
db.Begin()方法启动一个事务,返回一个事务对象tx。 - 执行SQL操作:使用事务对象
tx执行多个SQL操作,如tx.Exec()、tx.Query()等。 - 提交或回滚事务:如果所有SQL操作都成功执行,使用
tx.Commit()提交事务;如果出现错误,使用tx.Rollback()回滚事务。
事务的使用场景
- 转账操作:转账操作涉及从一个账户扣款和另一个账户加款,这两个操作必须同时成功,否则数据会不一致。
- 订单处理:在提交订单时,可能需要减少库存并增加订单记录,这些操作需要保证同时成功。
- 批量操作:在批量插入、更新或删除数据时,确保所有操作要么全部执行,要么全部回滚。
注意事项
- 尽量减少事务的粒度:长时间的事务会占用数据库资源,可能导致其他操作被阻塞。尽量确保事务中的操作只涉及必要的数据库访问。
- 避免在事务中进行长时间的操作:如果在事务中进行文件IO、网络请求等长时间操作,可能会导致数据库连接被长时间占用,影响系统性能。
- 正确处理事务的提交和回滚:确保在所有可能的错误情况下,事务能够正确回滚,并释放相关资源。
数据库连接方法
dsn := "username:password@tcp(127.0.0.1:3306)/dbname"
| 方法名 | 描述 | 示例 |
|---|---|---|
sql.Open() |
打开数据库连接 | db, err := sql.Open("mysql", dsn) |
db.Ping() |
测试数据库连接是否有效 | err = db.Ping() |
db.Close() |
关闭数据库连接 | defer db.Close() |
事务方法
| 方法名 | 描述 | 示例 |
|---|---|---|
db.Begin() |
开始一个事务 | tx, err := db.Begin() |
tx.Rollback() |
回滚事务 | tx.Rollback() |



被折叠的 条评论
为什么被折叠?



