Mysql事务

文章介绍了数据库事务的四大特性以及并发控制中的问题,如脏读、不可重复读和幻读。讨论了InnoDB引擎的四种隔离级别及其影响,包括读未提交、读已提交、可重复读和串行化。还提到了MySQL中的锁类型,如共享锁和排他锁,并阐述了MVCC(多版本并发控制)的工作原理,以及RedoLog和UndoLog在确保事务持久性和回滚操作中的作用。

1.事务的基本特性

2.并发问题

脏读:破坏隔离性,看到了另一个事务未提交的数据
事务B脏读
不可重复读(强调的是数据的更新)
在这里插入图片描述
幻读(强调的是数据的增减)
在这里插入图片描述

InnoDB引擎中的四种隔离级别

设置隔离级别

set tx_isolation= 'read-uncommitted' 'read-committed' 'repeatable-read' 'serializable' 
  • read uncommit(读未提交):有脏读、不可重复读、幻读问题

  • read commit (读已提交):有不可重复读、幻读问题(oracle默认隔离级别)
    写操作会加写锁,只有事务提交之后,其他事务才能读写
    当前读就是悲观锁的具体功能实现

  • repeatable read(可重复读):有幻读(mysql默认隔离级别)
    快照读

     	可以读写同时,不能写写同时
    
  • serializable (串行):上面问题全部解决 ,给所有读操作加写锁实现

mysql 锁

读锁(共享锁、S锁):select … lock in share mode;
读锁是共享的,会阻塞写,不会阻塞读

写锁(排它锁、X锁):select … for update;
写锁是排他的,update、delete、insert都会加写锁,会阻塞其他的写和读,

MyISAM在select前,会自动给涉及到的表加读锁,写操作会给表自动加写锁
InnoDB在select前,不会加锁,但写操作会加行锁

MVCC多版本并发控制

实现原理主要依赖隐藏字段,undo log ,read view来实现
1.隐藏字段
DB_TRX_ID:创建或修改该记录的事务id
DB_ROLL_PTR:回滚指针,指向这条记录的上一个版本
2.undo log:记录数据的历史版本
3.read view:可见性判断
trx_list:活跃的事务id
up_limit_id:list中的最小id
low_limit_id: 下一个要分配的id

读已提交,语句级快照,每个快照读都会生成并获取最新的ReadVIew
可重复读,事务级快照,同一个事务中的第一个快照才会创建ReadView,之后的快照读都是同一个ReadView

redo log

在这里插入图片描述
redo log的主要作用就是用来记录已成功提交事务的修改信息,可以防止因宕机导致修改的数据未能及时持久化到磁盘中,系统重启之后就可以读取redo log来恢复最新的数据。从而实现事务的持久性。

undo log

每条数据变更(insert/update/delete)操作都伴随着一条undo log的生成,并且回滚日志必须先于数据持久化到磁盘上;
所谓的回滚就是根据undo log日志做逆向操作,比如delete的逆向操作为insert,insert的逆向操作为delete,update的逆向操作为update等;

MySQL 事务是指一组数据库操作,这些操作要么全部执行,要么全部不执行,其目的是保证在并发环境下,数据的一致性和完整性。MySQL 事务具有 ACID 性质,即原子性、一致性、隔离性和持久性。 MySQL 中使用事务需要使用 BEGIN、COMMIT 和 ROLLBACK 语句,其中 BEGIN 表示开启一个事务,COMMIT 表示提交事务,ROLLBACK 表示回滚事务事务的基本语法如下: ``` BEGIN; -- 执行一组数据库操作 COMMIT; -- 提交事务 -- 或者 ROLLBACK; -- 回滚事务 ``` 在 MySQL 中,事务的隔离级别分为四个等级,分别是 Read Uncommitted、Read Committed、Repeatable Read 和 Serializable。隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。 MySQL 事务的 ACID 性质有以下含义: 1. 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败回滚,不会只执行其中的一部分操作。 2. 一致性(Consistency):事务执行前后,数据库中的数据必须保持一致性状态,即满足数据库的约束条件和完整性规则。 3. 隔离性(Isolation):事务之间应该是相互隔离的,一个事务的执行不应该被其他事务干扰,保证事务之间的数据相互独立。 4. 持久性(Durability):事务提交后,对数据库的修改应该是永久性的,即使出现系统故障或电源故障,也不应该对数据产生影响。 总之,MySQL 事务是一组数据库操作,具有 ACID 性质,可以通过 BEGIN、COMMIT 和 ROLLBACK 语句来实现,隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值