Mysql数据库中的事务

mysql数据库事务的四大特性(ACID)

原子性:

事务是不可分割的最小的操作单元,要么全部成功,要么全部失败

一致性:

一致性是指数据从一种有效状态转换为另一种有效的状态

隔离性:

数据库系统提供的隔离机制,数据库在开启事务后,保证每个事务不受其他事务并发执行的影响,多个并发事务之间互相隔离.

持久性:

事务一旦提交或回滚,他对数据库的改变就是永久的(数据库的数据存在磁盘中)

如何理解数据库的一致性?

数据库一致性有两层含义(来自mysql事务“一致性”理解 - 掘金 (juejin.cn)):数据库的一致性其实包含两个层面。从数据库层面理解,“一致性”实际上是一组约束、规则。从业务层面讲,“一致性”实际上是指事务把数据库从一个有效的状态转移成另一个有效状态。

所谓一致性是数据库处理前后结果应与其所抽象的客观世界中真实状况保持一致。这种一致性是一种需要管理员去定义的规则。管理员如何指定规则,数据库就严格按照这种规则去处理数据。(来自(5条消息) 如何理解事务一致性?_转码失败的大龄码农的博客-CSDN博客)

隔离性中的隔离级别:

读未提交(read uncommitted):

读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。

读已提交(read committed):

读已提交,顾名思义,就是只能读到已经提交了的内容.(是SQL Server和Oracle的默认隔离级别)

可重复读(repeated read):

可重复读,顾名思义,就是专门针对“不可重复读”这种情况而制定的隔离级别,自然,它就可以有效的避免“不可重复读”。而它也是MySql的默认隔离级别。

串行化(serializable):

这是数据库最高的隔离级别,这种级别下,事务“串行化顺序执行”,也就是一个一个排队执行。这种级别下,“脏读”、“不可重复读”、“幻读”都可以被避免,但是执行效率奇差,性能开销也最大,所以基本没人会用。

事务隔离级别中会出现的三种问题:

 脏读:

一个事务读到另一个事务还没有提交的事务.

 

 不可重复读:

一个事务先后读取了同一条数据,但是前后读取的数据的内容不同.

幻读:

一个事务A按照条件查询数据时,发现没有查询带到对应id(主键)的数据(说明可以插入此id的数据),此时事务B也正好插入了该id的数据,随后事务A在插入数据时,发现无法插入对应id数据,发现该id的数据已经存在了(ps,但此时事务A依旧无法查询到事务B插入的数据内容),仿佛出现了幻影.

关于幻读的理解这里有一篇文章有合理的解释

http://t.csdn.cn/VEk7z

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值