当前位置: 首页 > news >正文

数据库事务Transaction

事务是数据库操作的基本逻辑单位

事务的语法

Begin transaction

    ....

    commit;

    rollback;

End  transaction

事务的ACDI特性

原子性:Atomic   操作的最小逻辑单位,要么都做,要么都不做。

一致性:Consistent  完整性约束

持久性:Durability   修改是永久的,即便数据库发生重启、故障恢复也应该保持数据不变

隔离性:Isolation   事务的并发执行互不影响

事务并发执行带来的问题

问题1:丢失修改(售出2张票,数据库中只减少了1张)

时间T1T2
t1read(A)[16]
t2read(A)[16]
t3A=A-1
t4A=A-1
t5write(A)[15]
t6write(A)[15]

问题2:都脏数据

时间T1T2
t1read(A)[16]
t2A=A-1
t3write(A)[15]
t4read(A)[15]
t5ROLLBACK[16]

问题3:不可重复读

时间T1T2
t1read(A)[16]
t2read(A)[16]
t3A=A-1
t4write(A)[15]
t5read(A)[15]

数据库的并发控制

排他锁(X锁)事务T对数据A加上X锁之后,只允许T读取和修改数据A, 其他事务对数据A不能再加任务锁,即不能再对数据A进行读写操作,直到事务T释放A上的锁。

共享锁(S锁) 事务T对数据A加上S锁之后。 就只能读取A但不可以修改,其他事务也可以对A加S锁来读取。只要A上有S锁,任何事务就只能加S锁不能加X锁。

封锁协议

三级封锁协议

(1)一级封锁协议:加X锁,解决丢失修改的问题。

(2)二级封锁协议:加S锁,解决读脏数据的问题。读完即释放S锁

(3)三级封锁协议:加S锁, 解决不可重读的问题。事务结束再释放S锁

两段锁协议

事务在读写数据之前必须加锁,释放锁之后不能再加任何锁。

严格遵守拓展阶段加锁,收缩阶段释放锁。

事务的隔离级别

事务的并发执行破坏了事务的隔离性,通过封锁协议对其进行限制,不同粒度的锁和多粒度的封锁使事务有4种不同的隔离级别。

  (1)  Read uncommitted(读未提交)   ----> 对应一级封锁协议

(2)Read committed(读已提交)      -----> 对应二级封锁协议

(3)Repeatable read(可重复读)     ------> 对应三级封锁协议

(4)Serializable(可串行化), 最高的事务隔离级别

1,2,3,4隔离级别逐渐增强

http://www.xdnf.cn/news/390871.html

相关文章:

  • 【前端】【css】【总复习】三万字详解CSS 知识体系
  • ActiveMQ 生产环境问题排查与调优指南(二)
  • 如何实现Flask应用程序的安全性
  • BuildAdmin-v2.3.0 发布
  • 黑马k8s(三)
  • Spring配置文件及其日志
  • RAGMCP基本原理说明和相关问题解惑
  • Wordpress头像无法加载太慢问题解决方式
  • Python多环境管理指南
  • 5月11日星期日早报简报微语报早读
  • Linux 进程等待
  • Nginx location静态文件映射配置
  • 【入门】打印字母塔
  • 如何配置光猫+路由器实现外网IP访问内部网络?
  • 嵌入式中屏幕的通信方式
  • docker安装superset实践
  • 深入理解 Linux 权限控制机制
  • 如果设置了 LimitRange ,并且同时container也设置了request/limit,哪个优先级高?
  • redis数据结构-08(SINTER、SUNION、SDIFF、SISMEMBER)
  • Linux基础io知识
  • 二叉树三大遍历-精髓(Java)
  • 代码随想录训练营第二十一天 |589.N叉数的前序遍历 590.N叉树的后序遍历
  • 【大模型】MS-SWIFT : 高效、灵活的大模型微调框架
  • 【Java EE初阶 --- 多线程(初阶)】线程安全问题
  • 【Android】cmd命令
  • 大学之大:苏黎世大学2025.5.11
  • 数字化工厂中央控制室驾驶舱系统 API接口文档
  • go 通过汇编学习atomic原子操作原理
  • iVX 图形化编程平台:结合 AI 原生开发的革新与实践
  • 07.three官方示例+编辑器+AI快速学习webgl_buffergeometry_attributes_integer