MST

星途 面试题库

面试题:MySQL中事务处理的基本操作有哪些以及如何设置隔离级别

请简述在MySQL中,事务处理涉及到的基本SQL语句有哪些,例如开始事务、提交事务、回滚事务等。同时,说明一下如何设置MySQL事务的隔离级别,并列举出常见的隔离级别及其特点。
45.2万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

事务处理基本SQL语句

  1. 开始事务
    • START TRANSACTION:开始一个新的事务。例如:
    START TRANSACTION;
    
  2. 提交事务
    • COMMIT:将事务中执行的所有更改永久保存到数据库中。例如:
    COMMIT;
    
  3. 回滚事务
    • ROLLBACK:撤销事务中执行的所有更改,将数据库恢复到事务开始前的状态。例如:
    ROLLBACK;
    
  4. 设置保存点
    • SAVEPOINT savepoint_name:在事务中创建一个保存点,以便可以回滚到该点,而不是回滚整个事务。例如:
    SAVEPOINT my_savepoint;
    
    • ROLLBACK TO SAVEPOINT savepoint_name:回滚到指定的保存点。例如:
    ROLLBACK TO SAVEPOINT my_savepoint;
    
    • RELEASE SAVEPOINT savepoint_name:删除指定的保存点。例如:
    RELEASE SAVEPOINT my_savepoint;
    

设置MySQL事务隔离级别

  1. 设置会话级别的隔离级别
    SET SESSION TRANSACTION ISOLATION LEVEL [隔离级别];
    
    例如,设置为可重复读隔离级别:
    SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
    
  2. 设置全局级别的隔离级别
    SET GLOBAL TRANSACTION ISOLATION LEVEL [隔离级别];
    
    例如,设置为读已提交隔离级别:
    SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
    

常见隔离级别及其特点

  1. 读未提交(Read Uncommitted)
    • 特点
      • 允许事务读取未提交的数据更改,这可能导致脏读(Dirty Read),即一个事务读取到另一个事务未提交的更新数据。
      • 隔离级别最低,并发性能最高。
  2. 读已提交(Read Committed)
    • 特点
      • 只允许事务读取已经提交的数据更改,避免了脏读。
      • 但可能出现不可重复读(Non - Repeatable Read),即同一事务多次读取同一数据时,由于其他事务的提交操作,导致两次读取结果不一致。
      • 是大多数数据库系统的默认隔离级别。
  3. 可重复读(Repeatable Read)
    • 特点
      • 确保在同一事务内多次读取同一数据时,读取到的数据始终一致,避免了不可重复读。
      • 但是可能出现幻读(Phantom Read),即当一个事务在相同条件下多次读取数据时,由于其他事务插入新数据,导致每次读取的结果集数量不一致。
      • MySQL默认的隔离级别是可重复读,通过MVCC(多版本并发控制)机制解决幻读问题。
  4. 串行化(Serializable)
    • 特点
      • 最高的隔离级别,事务串行执行,避免了脏读、不可重复读和幻读。
      • 但并发性能最低,因为事务只能依次执行,不能并发执行。