mysql-08-事务

事务

 

事务特性:

1.失败后,可以回到开始的状态

2.事务内的操作没有全部成功之前,别的用户(进程、会话)不能看到操作内的数据修改。

 

实现思路:

在一组操作之前设置一个备份点(记号)。如果事务成功,则让别的用户看到更改;如果事务失败,则回滚到备份点的位置。

 

实现方法:

使用innodb引擎的事务日志功能。

Sql的执行分成两个阶段:

1.执行阶段

2.将执行结果提交到数据库

其中,事务日志保存的就是执行阶段的结果,如果用户选择提交,则将结果同步到数据库。默认的执行方式是自动提交,即执行完毕后自动同步到数据库。存在一个系统变量auto_commit,可以对自动提交进行配置,使用show variables like autocommit; (因为系统变量非常多,所以通常使用show variables like ...语法查看某一特定的变量)可以查看系统变量。使用set auto_commit=1; 打开自动提交功能。Set auto_commit=0; 关闭自动提交功能(通常用于测试)。自动提交关闭的状态下,可以使用commit命令手动提交,如果出现错误,使用rollback命令回滚一次。

 

常见的事务指令:

1.开启事务: start transaction; 

2.成功: commit; 提交

3.失败:  rollback; 回滚

 

事务的特点:

ACID属性: 

原子性(atomicity)、

一致性(consistency)、

隔离性(isolation)、

持久性(durability

 

事务的隔离级别:

数据库的事务隔离级别有四个,由低到高分别是: read uncommitted, read committed, repeatable read, serializable。这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

 

脏读

不可重复读

幻读

Read uncommiteed

Read committed

Repeatable read

serializable

注:“√”表示可能出现,“叉”表示不会出现

 

大多数数据库的默认隔离级别是read committed,oraclesqlserverMysql的默认级别是repeatable read。 隔离级别越高,代价花费越高,性能越低,数据库系统应该根据应用场景选择合适的隔离级别。

例如有些统计工作涉及的数据量巨大,读到一些“脏数据”对最终的统计精度没什么影响,此时就可以降低对一致性的要求以减少系统开销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值