事务的特性是什么?可以详细说一下吗?

候选人:事务的特性是ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。例如,A向B转账500元,这个操作要么都成功,要么都失败,体现了原子性。转账过程中数据要保持一致,A扣除了500元,B必须增加500元。隔离性体现在A向B转账时,不受其他事务干扰。持久性体现在事务提交后,数据要被持久化存储。

并发事务带来哪些问题?

候选人:并发事务可能导致脏读、不可重复读和幻读。脏读是指一个事务读到了另一个事务未提交的“脏数据”。不可重复读是指在一个事务内多次读取同一数据,由于其他事务的修改导致数据不一致。幻读是指一个事务读取到了其他事务插入的“幻行”。

怎么解决这些问题呢?MySQL的默认隔离级别是?

候选人:解决这些问题的方法是使用事务隔离。MySQL支持四种隔离级别:

  1. 未提交读(READ UNCOMMITTED):解决不了所有问题。

  2. 读已提交(READ COMMITTED):能解决脏读,但不能解决不可重复读和幻读。

  3. 可重复读(REPEATABLE READ):能解决脏读和不可重复读,但不能解决幻读,这也是MySQL的默认隔离级别。

  4. 串行化(SERIALIZABLE):可以解决所有问题,但性能较低。

undo logredo log的区别是什么?

候选人:redo log记录的是数据页的物理变化,用于服务宕机后的恢复,保证事务的持久性。而undo log记录的是逻辑日志,用于事务回滚时恢复原始数据,保证事务的原子性和一致性。