浅谈事务ACID

216 阅读2分钟

面试官一进来:你好,我们聊一下事务吧,你可以解释一下ACID是什么吗? 我:ACID?我熟。增删改查呀。 面试官:突然想起有点事,今天面试就到这吧。。。。

ACID就是指的事务满足原子性,一致性,隔离性,持久性

分别解释一下就是:

A atomicity

一次事务是不可分割的整体,操作要么都做要么都不做,就像LOL五黑要么大家都不死,要么不能苟活(亚索除外)。比如转账操作,A给B转100,假如A扣了100,而此时不满足原子性的话,没给B加上一百,则就会无缘无故的丢掉100元了。

C consistency

一致性,指事物前和事务执行后数据都处于一种可预期的合理状态,比如刚才的例子A给B转100,此时A应该扣去100,B应该加上100,这才是我门预期的合理状态,毕竟金钱守恒麻。还有一个就是如果账户只有100,却想取出1000,这也是不合理的,除非你去找马云借。

I isolation

隔离性,指的是当多个事务并行处理时,事务操作不能互相干扰,事务之间是隔离的,比如举个例子,当很多人看一本书的时候,A在第10页放了一个书签记录了他停止的页数,而这时候B也看了这本书,然后把书签放到了100页,下次A在看书就造成了信息的错乱。(这个例子不知道合不合适呀)

D durability

持久性是指事务一旦提交,对数据库的改变应该是永久的。

常见问题:

mysql怎么保证原子性?

undo log 回滚日志,当你使用rollback时,就是靠回滚日志来记录要回滚的信息: (1)当你delete一条数据的时候,就需要记录这条数据的信息,回滚的时候,insert这条旧数据 (2)当你update一条数据的时候,就需要记录之前的旧值,回滚的时候,根据旧值执行update操作 (3)当年insert一条数据的时候,就需要这条记录的主键,回滚的时候,根据主键执行delete操作

mysql怎么保证一致性?

通过另外三个B AID来保证,就比如adc怎么获取胜利,靠上单打野中单辅助保证。。。

怎么保证隔离性?

对数据库加锁(具体怎么操作还得再摸索一下,有可能是和数据库行锁表锁意向锁之类的有关)

参考链接:mp.weixin.qq.com/s?__biz=MzI…