「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」
天天和数据库打交道,大家肯定都听说过事务的概念,那么,什么是事务呢?
数据库事务
事务就是对数据库的一组操作,要么全部成功,要么全部失败,不允许出现一半成功,一半失败的情况。举个例子,我们转账业务,A要给B转账,A账户此时有100元,B卡里没有钱。我们可以先把A的金额扣除,然后给B的账户加钱。如果这个时候已经把A的金额扣除了,但是给B加钱的时候出错了,但是没有事务的保障,那么,A的钱就莫名奇妙少了100块。
事务的ACID特性
事务的ACID特性指的是 原子性、一致性、隔离性和持久性。
原子性
在同一个事务内的所有操作,要么同时成功,要么同时失败。
一致性
如上我们局的例子,事务执行前后的状态是一致的,系统里面转账前有100块钱,转账以后也应该是100块钱,不能有差错。
隔离性
指多个事务之间不能相互干扰。比如说我们有两个事务A和B,A在对账户a做修改的时候,B事务在查询的时候不应该看到A未提交的修改数据。否则,A事务回滚,B就读到了错误的数据。
持久性
持久性表示当事务提交的时候,事务内对数据库做的操作就应该被持久化,就算数据库宕机,恢复之后也要有办法找回已提交事务的数据。
事务的隔离级别
我们说到事务的隔离性,A修改的数据不能B查询到,但有没有可能我们确实需要查询未提交事务的数据呢?这里数据库定义了四种隔离级别。它们分别是:读未提交、读已提交、可重复读、串行化。性能由高到低,当然隔离级别由低到高。我们应该根据项目的情况选择合适的隔离级别。