MySQL transaction

Wesley13
• 阅读 700

MySQL transaction(数据库的事务)

数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作。 要么完全执行,要么完全地不执行。

ACID 事务必须具备ACID四个特性

原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。

一致性(Consistency) 一致性是指事务必须使数据库从一个一致的状态变到另外一个一致的状态, 也就是说执行事务之前和之后的状态都必须处于一致的状态。

在事务T开始时,此时数据库有一种状态,这个状态是所有的MySQL对象处于一致的状态,例如数据库完整性约束正确, 日志状态一致等,当事务T提交后,这时数据库又有了一个新的状态,不同的数据,不同的索引,不同的日志等, 但此时,约束,数据,索引日志等MySQL各种对象还是要保持一致性。

隔离性(Isolation)

隔离性是指当多个用户并发访问数据库时,比如操作同一张表时, 数据库为每个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

持久性(Durability)

持久性是指一个事务一旦被提交了,那么对于数据库中的数据改变就是永久性的, 即便是在数据库系统遭遇到故障的情况下也不会丢失提交事务的结果。

MySQL中的事务

MySQL中的事务默认是自动提交的

可以使用 set autocommit = 0; 设置禁止自动提交

开启一个事务使用start transaction;

在一个事务中的组成单元,如果失败的话, 可以使用ROLLBACK;回滚事务 如果提交的话,使用COMMIT;

事务隔离性以及在MySQL中实践

当多个线程开启事务操作数据库中数据时,数据库系统要能进行隔离性操作,以保证各个线程获取到的数据的准确性。

如果没有隔离性,会发生的几种问题

脏读(Dirty Read) 一个事务处理过程里读取了另一个未提交的事务中的数据。

不可重复读(NonRepeatable Read)

对于数据库中的某个数据,一个事务范围内多次查询却反悔了不同的数据值,这是由于在查询的间隔期间, 另外一个事务修改并提交了该数据。

幻读(Phantom Read) 在一个事务中读取了别的事务插入的数据,导致前后不一致

如丙存款100元未提交,这时银行做了报表统计account表中所有用户的总额500元,然后丙提交了,这时银行在统计发现账户为600元了, 造成虚读同样会使银行不知所措。

不同隔离级别的问题

隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read)

未提交读(Read uncommitted) 可能 可能 可能 已提交读 (Read committed) 不可能 可能 可能 可重复读 (Repeatable read) 不可能 不可能 可能 可串行化 (Serializable) 不可能 不可能 不可能

MySQL中的隔离级别设置

查看当前事务的隔离级别

SELECT @@tx_isolation;

修改事务的隔离级别

SET [global | session] TRANSACTION ISOLATION LEVEL 隔离级别的名称;

SET TX_ISOLCATION='隔离级别名称';

SET TRANSACTION ISOLATION LEVEL Read uncommitted;(设置MySQL数据库的事务隔离级别为Read uncommitted)

MySQL事务的隔离级别:Serializable | Repeatable read | Read committed | Read uncommitted

注意:

设置默认级别是指当前session的下一个事务。 设置session级别是指当前session以后的所有的事务 设置global级别是指对之后的所有的session,不包括当前session

MySQL四种事务隔离级别的小总结

http://blog.chinaunix.net/uid-14010457-id-3956842.html(mysql四种隔离级别的使用)

MySQL中的锁机制

数据库为了维护ACID,尤其是一致性和隔离性,一般使用加锁的方式。 同时由于数据路是个高并发的应用,同一时间有大量的并发访问,如果加锁过度,会极大地降低并发处理的能力。 所以对于加锁的处理,是数据库对于事务处理的精髓所在。

锁方案

一次封锁

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
LosAngel LosAngel
3年前
golang实现MySQL数据库事物的提交与回滚
MySQL事务主要用于处理操作量大,复杂度高的数据。在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务。事务用来管理insert,update,delete语句,事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicit
Easter79 Easter79
3年前
Spring事务(二):Spring事务的特点
事务特性实现事务必须满足以下四大特性:Atomicity(原子性):构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。Consistency(一致性):数据库在事务执行前后,完整性没有被破坏。(转账前后,钱的总数不变)Durability(持久性):事务执行成功后必须全部写入磁盘。
Wesley13 Wesley13
3年前
mysql 事物四大特性和事物的四个隔离
1、事物四大特性(ACID)1.原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。2.一致性(consistency):数据库总数从一个一致性的状态转换到另一个一致性的状态。3.隔离性
Wesley13 Wesley13
3年前
MySql学习17
一.数据库事务的四大特性(ACID)如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:原子性(Atomicity):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操
Wesley13 Wesley13
3年前
Mysql系列第十五讲 事务详解
Mysql系列第十五讲什么是事务?事务的几个特性(ACID)Mysql中事务操作savepoint关键字只读事务事务中的一些问题事务的隔离级别关于隔离级别的选择什么是事务?数据库中的事务是指对数据库执行一批操作,这些操作最终要么
Wesley13 Wesley13
3年前
MySQL 事务的四大特性ACID介绍
事务的四大特性(ACID)1、原子性(Atomicity)事务是一个不可分割的单位,事务中的所有SQL等操作要么都发生,要么都不发生。2、一致性(Consistency)事务发生前和发生后,数据的完整性必须保持一致。3、隔离性(Isolation)当并发访问数据库时,一个正在执行的事务在执行完毕前,对应其他的会话是不可见的,多个并发事
Wesley13 Wesley13
3年前
MySQL常见问题
事务四大特性原子性:不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态一致性:如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的;隔离性:事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。
事务的ACID,隔离级别,脏读,幻读和不可重复读
事务的ACID原子性(atomicity)一个事务中执行的sql语句,要么全部成功,要么全部失败,不可能一部分成功。一致性(consistency)事务执行前和执行后数据一致,也就是说事务中的sql语句不能只执行一部分。这种请款一般发生在事务异常中断,服