Day029MySQL中的事务

mac2025-08-23  1

一、事物的简介

1.事物的概念

事物是一个操作序列,该序列中的多个操作要么都做,要么都不做

是MySQL5.5之后的存储引擎所支持

2.事物的特点

a.原子性

原子是自然界中最小的颗粒,具有不可再分的特点

事物中的所有操作可以看作是一个原子,要么全部执行,要么全不执行

b.一致性

事物执行的结果必须要保证数据库中数据的一致性

c.隔离性

隔离性指各个事物的操作是互不干扰的,任意一个事物的内部操作都对其他并发的事物都不能进行干扰

d.持久性

指事物一旦提交后,对数据库中数据做出的任何改变都会永久保存

二.事物的控制

1.开启事物

语法:start transaction |begin 开启一个新的事物

(1).创建一个库test5

(2).创建一张表account(id账号主键唯一,username账号名,balance金额)

(3).插入数据

例如:开启新事物,完成张三给李四转账200

start transaction;

update account set balance=balance-200 where username='张三';

update account set balance=balance+200 where username='李四';

注意:使用start transaction 开启一个新事物后,该事物就不会自动提交,必须手动提交

2.提交事物

语法:commit;

例如:开启新事物,完成张三给李四转账200,提交事物

start transaction;

update account set balance=balance-200 where username='张三';

update account set balance=balance+200 where username='李四';

commit;

3.事物回滚

语法:rollback;

注意:开启的事物,未提交时候可以回滚

例如:回滚事物

start transaction;

update account set balance=balance-200 where username='张三';

update account set balance=balance+200 where username='李四';

rollback;

读取其他事务未提交的数据也称为脏读(DIRTY READ) 。 我们可以这样来理解脏读:

A 事务在更新一条记录, 但尚未提交前, B 事务读到了 A 事务更新后的记录, 那么 B 事务

会产生对 A 事务未提交数据的依赖。 一旦 A 事务回滚, 那么 B 事务读到的数据, 将是错误

的脏数据。

三.事物的隔离级别

事物的隔离级别用于决定如何控制并发用户读写数据的操作

事物的隔离级别由低到高分为:

1.read uncommitted

指读取未提交的数据内容

2.read committed

指读取提交的数据,该隔离级别下,所有事物只能看到其他事物已经提交的数据。该隔离级别解决了脏读的问题。

3.repeatable read

指(可重复读)是MySQL默认的隔离级别

4.serializable

指(可串行化)该隔离级别是最高的,同时花费也是最高的,性能最低,一般很少用

因为在该隔离级别下,事物按着顺序执行

最新回复(0)