MYSQL----事务(Transaction)

什么是事务?

在数据库管理系统中,事务(Transaction)是指作为单个逻辑工作单元执行的一组操作。这些操作要么全部执行,要么全部不执行

事务的特性-ACID

事务的主要特性可以用 ACID 原则来描述:

  • 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成。即使发生系统故障,事务也不会处于部分完成状态。

  • 一致性(Consistency):事务执行前后,数据库都处于一致的状态。这意味着事务在执行时不会违反数据库的完整性约束。

  • 隔离性(Isolation):一个事务的执行不会被其他事务的操作所干扰。不同事务之间的操作是隔离的。
  • 持久性(Durability):一旦事务提交,它对数据库的改变是永久的,即使系统故障也不会丢失。

MySQL 中,事务管理主要依赖于存储引擎,最常用的事务存储引擎是 InnoDB。  

事务的基本操作语句

  • START TRANSACTION:显式地开始一个事务

  • COMMIT:提交当前事务,使其对数据库的更改永久化

  • ROLLBACK:回滚当前事务,撤销其对数据库的更改

  • SAVEPOINT:设置保存点,用于在事务中实现部分回滚

  • ROLLBACK TO SAVEPOINT:回滚到指定的保存点

示例:事务的使用

-- 开始事务
START TRANSACTION;

-- 执行一些数据库操作
INSERT INTO accounts (account_id, balance) VALUES (1, 1000);
INSERT INTO accounts (account_id, balance) VALUES (2, 1000);

-- 设置保存点
SAVEPOINT sp1;

-- 执行更多的数据库操作
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

-- 回滚到保存点 sp1
ROLLBACK TO SAVEPOINT sp1;

-- 提交事务
COMMIT;

事务隔离级别

事务隔离级别定义了事务之间如何相互影响,MySQL 支持四种隔离级别:

  1. 读未提交(READ UNCOMMITTED):一个事务可以读取到其他事务未提交的数据,可能导致脏读(Dirty Read)

  2. 读提交(READ COMMITTED):一个事务只能读取到其他事务已经提交的数据,避免脏读,但可能导致不可重复读(Non-repeatable Read)

  3. 可重复读(REPEATABLE READ):在一个事务中多次读取同一数据会返回相同的结果,避免不可重复读,但可能导致幻读(Phantom Read)这是InnoDB的默认隔离级别。

  4. 串行化(SERIALIZABLE):最高的隔离级别,通过强制事务串行执行,完全避免幻读,但可能导致性能下降

可以通过以下命令设置事务的隔离级别:

-- 设置全局隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- 设置会话隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值