mysql事务

1.1事务的特性

原子性(Atomicity):语句要么全执行,要么全不执行,是事务最核心的特性,事务本身就是以原子性来定义的。实现主要基于undo log日志。

持久性(Durability):保证事务提交后不会因为宕机等原因导致数据丢失。实现主要基于redo log日志。

隔离性(Isolation):保证事务执行尽可能不受其他事务影响。InnoDB默认的隔离级别是RR,RR的实现主要基于锁机制、数据的隐藏列、undo log和类next-key lock机制。

一致性(Consistency):事务追求的最终目标,一致性的实现既需要数据库层面的保障,也需要应用层面的保障。

1.2 事务基础语法

1. 在 MySQL 命令行的默认设置下,事务是自动提交的,即执行了SQL 语句之后会马上执行 commit 操
作,我们可以设置 set autocommit=0 来禁用当前回话的自动提交。
2. 还可以用 begin 、start transaction 来显式的开始一个事务。
3. commit 在默认设置下是等价于 commit work 的,表示提交事务。
4. rollback 在默认设置下等价于 rollback work,表示事务回滚。
5. savepoint xxx 表示定义一个保存点,在一个事务中可以有多个保存点。
6. release savepoint xxx 表示删除一个保存点,当没有该保存点的时候执行该语句,会抛出一个异常。
7. rollback to [savepoint] xxx 表示回滚到某个保存点。
--查询事务自动提交状态
show variables like '%commit%';

在这里插入图片描述

事务自动提交修改方式:
--全局修改
set global autocommit=0;
--局部修改
set session autocommit=0;

在这里插入图片描述
1.3 事务的隔离性
在这里插入图片描述

MySQL 的默认隔离级别下,当一个事务还没有提交的时候,其他事务是无法感知到数据的变化的。

1.3 事务日志文件

重做日志 redo log ==>ib_logfile0  重新执行
回滚日志 undo log ==>ibdata       回滚数据

mysql对于事务的执行 =====> 日志先行    凡是sql执行都会执行事务
日志优先级大于实际操作的数据的 所有执行的sql都会先执行日志,在写数据

重做日志(redo log)

当我们在一个事务中尝试对数据进行写时,它会先将数据从磁盘读入内存,并更新内存中缓存的数据,然后生成一条重做日志并写入重做日志缓存,当事务真正 提交时,MySQL 会将重做日志缓存中的内容刷新到重做日志文件,再将内存中的数据更新到磁盘上

重做日志执行时间:
在mysql中事务执行commit提交了之后,但是服务器挂了,数据还没有写入磁盘,在mysql重启服务之后会
重新执行这个重做日志写入数据。

回滚日志(undo log)

所有事务进行的 修改都会先记录到这个回滚日志中,然后在对数据库中的对应行进行写入。 注意:系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时,还能够立刻通过查询回滚日志将之前未完成的事务进行

回滚日志执行时间:
1. 手动执行回滚命令时会执行
2. 如果程序在事务执行之后,提交命令执行之前出现了异常,在下次mysql服务重启的时候会执行

回滚日志(undo log)实现的是事务的一致性以及原子性

重做日志(redo log)实现的是事务的持久性

事务的隔离性通过事务的锁来实现===>行级锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值