事务四大特性
- 说一下事务和事务的特性:*
- 把需要保证
原子性
、一致性
、隔离性
、持久性
的一个或多个数据库操作称为一个事务(transaction)
原子性
是指一个事务是一个不可分割
的工作单位,所有操作要么全部完成、要么全部不完成,不会结束于某个中间环节一致性
是指事务执行前后,数据处于一种语义上的合法
状态
(1)数据库只是现实世界的一个映射,现实世界存在的约束需要在数据库中有所体现
(2)如果数据库中的数据全部符合现实世界中的约束,那么数据就是一致的
隔离性
是指多个事务并发执行
的时候各个事务之间不能相互干扰持久性
是指事务一旦提交,它对数据库的改变就是永久的(被刷新到磁盘上),接下来的其他操作或故障不应该对其有任何影响- 在四大特性中
原子性
、隔离性
、持久性
是手段,一致性
是目的,只有实现了AID三大特性,才有可能实现一致性
- MySQL中并不是所有存储引擎都支持事务功能,其中
InnoDB
支持事务功能,而MyISAM
不支持事务功能
- 数据库如何保持一致性:
数据库层面:
(1)数据库通过原子性
、隔离性
、持久性
来保证一致性
,即在ACID
四大特性中原子性
、隔离性
、持久性
是手段,一致性
是目的,数据库只有实现了AID三大特性,才有可能实现一致性应用层:
通过代码判断数据库数据是否有效,然后决定回滚还是提交数据
- 无法保证
原子性
/隔离性
/持久性
,会有什么后果:
- 无法保证
原子性
/隔离性
/持久性
,会出现数据不一致的情况
- 举例说明:
原子性:
(1)假设从账户A中转100元到账户B中,这个过程包含两个数据库操作,首先将账户A的余额减掉100,然后将账户B的余额加上100
(2)若无法满足原子性,在完成账户A减掉100后,将账户B的余额加上100的操作失败了,此时就会导致只减不加的数据不一致的问题一致性:
(1)假设A的账户里只有200元,转出300元出去后,A的账户中只有-100元,此时数据就是不一致,即不满足现实世界中对余额必须大于等于0的约束隔离性:
持久性:
(1)MySQL中为了解决内存和磁盘读写速度不一致的问题,MySQL是将磁盘中的数据加载到内存,对内存进行操作,然后再写回磁盘。
(2)当尚未将修改的数据从内存写到磁盘中,就发生了宕机,此时内存中的数据就发生了丢失,此时持久性就无法保持,数据同样处于不合法的状态,这种状态认为是数据不一致