mysql-08-事务

来源:互联网 发布:苹果电脑软件找不到 编辑:程序博客网 时间:2024/05/04 19:59

事务

 

事务特性:

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
原创粉丝点击