lov*_*ate 12 mysql rdbms transactions
我刚刚遇到交易,我想知道
对于1.我知道你必须将它用于银行转账,但是将它用于一切都不是更好吗?!?
Bil*_*win 28
事务的好处是执行复杂的更改,这可能需要对不同的表进行多次更新,并确保它们都将成功或者全部回滚.
这个术语是原子的,即变化不能再细分.
实际上,无论您是否请求,MySQL的默认存储引擎InnoDB都会使用事务处理.但大多数人使用一种名为autocommit的模式,其中每个语句隐式启动一个事务,并在语句完成后立即提交.在自动提交模式下,您没有机会选择回滚.声明成功,否则如果遇到错误则会自动回滚.
如果启动显式事务,执行一些更新,然后回滚,InnoDB将恢复原始数据状态.它通过将原始数据存储在称为回滚段的数据库区域中来保留原始数据.因此,如果您回滚,它只会重新复制这些数据页以替换您更改的数据页.
这可能需要一些时间,因此如果您尝试查询已更改但已回滚的数据,InnoDB会自动绕道以从回滚段中读取原始数据,直到将其重新合并到表中为止.
比如说你开始一个交易,并更新十亿行.这会将许多页面的原始行复制到回滚段,然后使用更改的数据填充表 - 但更改的数据是未提交的.没有人应该能够读取未提交的数据,因此查询该表的任何人都将自动从回滚段获取原始数据.
然后您回滚您的交易.在接下来的几分钟内,InnoDB逐渐清理,最终全部恢复同步.但是,任何人都可以在此期间继续查询原始数据.
如果您已经提交了您的事务,那么MySQL只会将所有已更改的数据标记为已提交,并且随后读取数据的任何人都不会遇到从回滚段读取的轻微开销.
| 归档时间: |
|
| 查看次数: |
5921 次 |
| 最近记录: |