【MySQL】事务:ACID 特性
原子性atomicity原子性是指事务是一个不可分割的工作单位要么全部提交要么全部失败回滚。即要么转账成功要么转账失败是不存在中间的状态。如果无法保证原子性会怎么样?就会出现数据不一致的情形A账户减去100元而B账户增加100元操作失败系统将无故丢失100元。 青柠来相伴代码更简单。 本文所有内容我都整理在了语雀博客里。 关注公众号【青柠代码录】 回复关键词青柠合集 ✨ 即可查看所有技术博客合集 一致性consistency根据定义一致性是指事务执行前后数据从一个 合法性状态 变换到另外一个 合法性状态 。这种状态 是 语义上 的而不是语法上的跟具体的业务有关。那什么是合法的数据状态呢满足 预定的约束 的状态就叫做合法的状态。通俗一点这状态是由你自己 来定义的比如满足现实世界中的约束。满足这个状态数据就是一致的不满足这个状态数据就 是不一致的如果事务中的某个操作失败了系统就会自动撤销当前正在执行的事务返回到事务操作 之前的状态。举例1 :A账户有200元转账300元出去此时A账户余额为-100元。你自然就发现了此时数据是不一致的为什么呢?因为你定义了一个状态余额这列必须0。举例2∶A账户200元转账50元给B账户A账户的钱扣了但是B账户因为各种意外余额并没有增加。你也知道此时数据是不一致的为什么呢?因为你定义了一个状态要求AB的总余额必须不变。举例3∶在数据表中我们将姓名字段设置为唯一性约束这时当事务进行提交或者事务发生回滚的时候如果数据表中的姓名不唯一就破坏了事务的一致性要求。隔离型isolation事务的隔离性是指一个事务的执行 不能被其他事务干扰 即一个事务内部的操作及使用的数据对 并发 的 其他事务是隔离的并发执行的各个事务之间不能互相干扰。如果无法保证隔离性会怎么样假设A账户有200元B账户0元。A账户往B账户转账两次每次金额为50 元分别在两个事务中执行。如果无法保证隔离性会出现下面的情形UPDATE accounts SET money money - 50 WHERE NAME AA; UPDATE accounts SET money money 50 WHERE NAME BB;持久性durability持久性是指一个事务一旦被提交它对数据库中数据的改变就是 永久性的 接下来的其他操作和数据库故障不应该对其有任何影响。持久性是通过 事务日志 来保证的。日志包括了 重做日志 和 回滚日志 。当我们通过事务对数据进行修改的时候首先会将数据库的变化信息记录到重做日志中然后再对数据库中对应的行进行修改。这样做的好处是即使数据库系统崩溃数据库重启后也能找到没有更新到数据库系统中的重做日志重新执行从而使事务具有持久性。总结ACID是事务的四大特性在这四个特性中原子性是基础隔离性是手段一致性是约束条件而持久性是 我们的目的。数据库事务其实就是数据库设计者为了方便起见把需要保证原子性、隔离性、一致性和持久性的一个或多个数据库操作称为一个事务。事务的特性ACID原子性一个事务不可再分割要么都执行要么都不执行一致性一个事务执行会使数据从一个一致状态切换到另外一个一致状态隔离性一个事务的执行不受其他事务的干扰持久性一个事务一旦提交则会永久的改变数据库的数据.
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2419683.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!