面试题答案
一键面试事务处理基本SQL语句
- 开始事务:
START TRANSACTION
:开始一个新的事务。例如:
START TRANSACTION;
- 提交事务:
COMMIT
:将事务中执行的所有更改永久保存到数据库中。例如:
COMMIT;
- 回滚事务:
ROLLBACK
:撤销事务中执行的所有更改,将数据库恢复到事务开始前的状态。例如:
ROLLBACK;
- 设置保存点:
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事务隔离级别
- 设置会话级别的隔离级别:
例如,设置为可重复读隔离级别:SET SESSION TRANSACTION ISOLATION LEVEL [隔离级别];
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
- 设置全局级别的隔离级别:
例如,设置为读已提交隔离级别:SET GLOBAL TRANSACTION ISOLATION LEVEL [隔离级别];
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
常见隔离级别及其特点
- 读未提交(Read Uncommitted):
- 特点:
- 允许事务读取未提交的数据更改,这可能导致脏读(Dirty Read),即一个事务读取到另一个事务未提交的更新数据。
- 隔离级别最低,并发性能最高。
- 特点:
- 读已提交(Read Committed):
- 特点:
- 只允许事务读取已经提交的数据更改,避免了脏读。
- 但可能出现不可重复读(Non - Repeatable Read),即同一事务多次读取同一数据时,由于其他事务的提交操作,导致两次读取结果不一致。
- 是大多数数据库系统的默认隔离级别。
- 特点:
- 可重复读(Repeatable Read):
- 特点:
- 确保在同一事务内多次读取同一数据时,读取到的数据始终一致,避免了不可重复读。
- 但是可能出现幻读(Phantom Read),即当一个事务在相同条件下多次读取数据时,由于其他事务插入新数据,导致每次读取的结果集数量不一致。
- MySQL默认的隔离级别是可重复读,通过MVCC(多版本并发控制)机制解决幻读问题。
- 特点:
- 串行化(Serializable):
- 特点:
- 最高的隔离级别,事务串行执行,避免了脏读、不可重复读和幻读。
- 但并发性能最低,因为事务只能依次执行,不能并发执行。
- 特点: