My SQL中间有空格是为了让ai朗读的时候能念好。不然就是:M!Y!S!Q!L!
欢迎收听《面试速通》。在本期节目中,我们将探讨My SQL中的事务管理,这是确保数据一致性和完整性的关键。
1. 什么是事务的四大特性(ACID)?
事务的四大特性是:
- 原子性(Atomicity) :事务是一个不可分割的工作单元,事务中的所有操作要么全部成功,要么全部失败。即使在系统崩溃的情况下,事务也要么完全执行,要么完全不执行。
- 一致性(Consistency) :事务执行前后,数据库的状态必须保持一致。即所有事务必须使数据库从一个一致状态变到另一个一致状态。
- 隔离性(Isolation) :一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。
- 持久性(Durability) :事务一旦提交,其结果就是永久性的,即使系统发生故障,事务的结果也不会丢失。
2. 事务的并发问题是什么?
事务并发执行时可能会引发以下问题:
- 脏读(Dirty Read) :一个事务读到了另一个事务未提交的数据。
- 不可重复读(Non-repeatable Read) :一个事务在读取同一行数据时,前后两次读取结果不一致,因为其他事务对该数据进行了更新。
- 幻读(Phantom Read) :一个事务读取同一查询条件的数据集,前后两次读取结果不一致,因为其他事务对该数据集进行了插入或删除操作。
3. 什么是脏读、幻读和不可重复读?
- 脏读(Dirty Read) :一个事务读到了另一个事务未提交的修改。这种情况下,如果修改的事务回滚了,那么读取的事务就读到了无效的数据。
- 不可重复读(Non-repeatable Read) :一个事务在读取同一行数据时,前后两次读取结果不一致,原因是其他事务对这行数据进行了更新。
- 幻读(Phantom Read) :一个事务在读取同一查询条件的数据集时,前后两次读取结果不一致,原因是其他事务对数据集进行了插入或删除操作。
4. 事务的隔离级别有哪些?
SQL标准定义了四种隔离级别,用于控制事务间的并发行为:
- 读未提交(Read Uncommitted) :最低的隔离级别,一个事务可以读取其他事务未提交的数据,可能会导致脏读、不可重复读和幻读。
- 读已提交(Read Committed) :一个事务只能读取其他事务已经提交的数据,避免了脏读,但可能会导致不可重复读和幻读。
- 可重复读(Repeatable Read) :一个事务在开始读取数据时,会创建一个快照,后续读取的所有数据都来自这个快照,避免了脏读和不可重复读,但可能会导致幻读。My SQL的InnoDB默认使用此隔离级别。
- 可串行化(Serializable) :最高的隔离级别,通过强制事务顺序执行,完全避免脏读、不可重复读和幻读,但性能较低,适合需要严格数据一致性的场景。
5. My SQL中的XA事务是什么?
XA事务是分布式事务协议(由X/Open定义),用于在多个资源管理器(如数据库)之间进行分布式事务管理。My SQL支持XA事务,用于确保跨多个数据库实例或其他分布式系统的事务一致性。
XA事务包括三种操作:
- XA START:开始一个全局事务。
- XA END:结束一个全局事务的分支。
- XA COMMIT:提交一个全局事务。
- XA ROLLBACK:回滚一个全局事务。
XA事务通过两阶段提交(2PC)协议实现:
- 第一阶段(准备阶段) :所有参与者准备提交事务,并将事务状态写入日志。
- 第二阶段(提交阶段) :如果所有参与者都准备成功,则提交事务;否则,回滚事务。
分布式事务确保了跨多个数据库系统的事务一致性,但由于其复杂性和性能开销,通常仅在需要严格一致性的场景下使用。
感谢收听本期《面试速通》。希望这些关于My SQL事务管理的知识对你有所帮助。记得关注我们的节目,获取更多面试技巧和知识。我们,下期再见!