一.定义

事务(Transaction)是把一组 SQL 操作当作一个逻辑单元来执行,要么全部成功,要么全部失败回滚,以此保证数据的一致性和完整性。

二.事务的四大特性(ACID)

原子性(Atomicity):事务内的操作要么全部完成,要么一个都不做。出错了就回滚到事务开始前的状态。

一致性(Consistency):事务执行前后,数据库都处于合法的状态(约束、触发器等不被破坏)。

隔离性(Isolation):多个事务并发执行时互不干扰,彼此看不见中间状态。

持久性(Durability):事务提交后,数据的修改就是永久的,即使系统崩溃也不会丢失。

三.事务操作

3.1 开启事务

方法一:

START TRANSACTION;

方法二:

BEGIN;

3.2 执行操作正常,提交

COMMIT;

3.3 执行操作出问题,回滚

ROLLBACK;

3.4 查看当前事务是否开启

SELECT @@autocommit;

3.5 提交:1为自动,0为手动

SET autocommit = 0;

四.并发事务问题

脏读:读到其他事务未提交的修改数据。

脏读示例

不可重复读:同一事务内,两次查询结果不一致(其他事务已提交修改)。

幻读:同一事务内,查询到的记录条数变了(其他事务新增 / 删除)。

五.隔离级别(由低到高)

隔离级别 脏读 不可重复读 幻读
READ UNCOMMITTED 可能 可能 可能
READ COMMITTED 不会 可能 可能
REPEATABLE READ(默认) 不会 不会 可能
SERIALIZABLE 不会 不会 不会

事务隔离级别越高,数据越安全,但是性能越低。

查看事务隔离级别:

SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别:

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

SESSION:只对当前连接生效(推荐,安全)
GLOBAL:对所有新连接生效(需要权限,谨慎使用)

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐