MySQL 事务

事务

1. 概念

事务是一组命令的集合,强调整体性。以 start transaction 或 begin 开始, 以 commit 或 callback 结束。

start transaction
update...  1
update...  2
commit 

begin
update... 3
update... 4
rollback

commit 表示提交本次事务,完成修改。(若失败,自动回滚回 begin 之前。)
rollback 表示回滚,还可设定回滚点。 savepoint xxx , rollback to xxx

2. 特征

原子性、一致性、 隔离性、持久性。

  • 原子性:表示整体事务要么全部成功,要么全部失败。
  • 一致性:表示事务前后的数据总量不变。
  • 隔离性:事务之间互不影响。
  • 持久性:事务执行成功后,写入磁盘。

3. 并发产生的问题

脏写、脏读、不可重复读、幻读

脏写

两条线程事务对一条数据做 update, 后来者会覆盖前者的 update。

脏读

一线程事务可以读到他线程已 update 但还未 commit 的数据。

不可重复读

一线程事务多次读一数据的结果不同,因他线程事务在对其数据 update 并 commit .

幻读

一线程事务对一表中的数据量多次读取,结果不同。因他线程事务在 insert 新内容到这个表并 commit.

脏读是 未提交。
不可重复读是已提交,重点看数据。
幻读是已提交,重点看数据行数。

4. 四个隔离级别

  • 读未提交:解决脏写,允许一事务读他事务的未提交的数据。
  • 读已提交:解决脏读,只允许一事务读他事务已提交的数据。
  • 可重复读:解决不可重复读,一事务读他事务已提交的数据,并且多次读取,结果不变。
  • 串行化:解决幻读,完全串行化的读写,但效率低。

四个级别依次增强。在前者的基础上解决更多的问题。

posted @   zxinlog  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示