事务有4个关键的属性,一般称为ACID:
- 原子性 一次事务的工作不能再划分为更小的部分。不管一个事务里是否包含多条SQL语句,要么全部都执行,要不全部都不执行
- 一致性 事务必须操作一致性的数据视图,必须使数据处于一致的状态
- 孤立性 事务是独立运行的实体,一个事务不能影响其它正在运行的事务
- 持久性 提交事务时,必须持久化。
事务的孤立级别有以下操作:
- Dirty读取操作 能够读取还没有提交的数据。比如一个事务对某些行集的数据进行了修改,但是还未提交该事务,这时候另一个事务能够读取到这些已更新的事务,如果前一个事务回滚了,这会造成大问题。
- NoRepeatable读取操作 指的是一个事务多次读取同一行数据时,另一个事务在该过程中修改该行的数据。
- Phantom读取操作 指一个事务多次读取同一个行集时,另一个事务在该过程中添加或删除该行集的行。
ADO.NET中事务的孤立级别:
- Read Uncommitted 其它事务的修改情况能够对某个事务的查询造成影响。支持Dirty,NoRepeatable,Phantom读取操作。如果设置为该级别,无并发模型,在读取过程中,不会获取锁也不会使用锁。
- Read Committed 这是SQL Server的默认设置。已提交的更新在事务间是可见的,支持NoRepeatable,Phantom读取操作。
- SnapShot 相当于另外实现的Read Committed,表示在一个事务中读取的数据永远也不会反映同时进行的其它事务的修改。事务使用事务开始时候存在的数据行版本,它不会获取锁。(Sql Server 2005支持)
- Repeatable Read 在一个事务中,所有的读取操作都是一致的,其它事务不能影响该事务的查询结果。支持Phantom读取操作
- Serializable 在所访问的行集上放置一个范围锁,防止在该事务完成之前,其它用户更新数据集或者添加、删除该数据集。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?