面试题答案
一键面试- 共享锁持久性:
- 共享锁(S锁)在事务提交或回滚之前一直保持。例如,事务T1对数据行R加了共享锁,在T1执行期间,其他事务可以对R加共享锁,但不能加排他锁。只有当T1结束(提交或回滚),共享锁才会释放。
- 排他锁持久性:
- 排他锁(X锁)同样在事务提交或回滚之前一直保持。例如,事务T2对数据行S加了排他锁,在T2执行期间,其他事务无论是想加共享锁还是排他锁,都会被阻塞,直到T2结束(提交或回滚),排他锁释放。
- 对事务保证数据一致性的作用及举例:
- 作用:共享锁和排他锁的持久性确保了在事务处理过程中,数据不会被其他事务以冲突的方式修改,从而保证了数据一致性。
- 举例:假设有一个银行转账场景,从账户A向账户B转账100元。
- 事务T3执行转账操作,首先对账户A加排他锁,防止其他事务在T3处理账户A数据时进行修改。在读取账户A余额(假设为1000元)后,更新余额为900元。
- 接着对账户B加排他锁,读取账户B余额(假设为500元),更新余额为600元。
- 整个过程中,由于排他锁的持久性,在T3未提交(或回滚)前,其他事务无法修改账户A和B的数据,避免了数据不一致问题,如防止在读取账户A余额后,其他事务修改了账户A余额,导致转账金额错误等情况。若使用共享锁,在读取账户余额时,其他事务只能读取不能修改,保证了读取数据的一致性。只有当T3提交后,排他锁释放,其他事务才可以操作账户A和B的数据。