MySQL之事务

一、事务的概念

事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。

事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。

事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。

事务通过事务的整体性以保证数据的一致性。

事务能够提高在向表中更新和插入信息期间的可靠性。
总结:事务就是有个明确的目标

二、事务ACID的特点

ACID,是指在可靠数据库管理系统(DBMS) 中,事务(transaction)应该具有的四个特性:原子性(Atomicity) 、一致性(Consistency )、隔离性(Isolation) 、持久性(Durability) 。 这是可靠数据库所应具备的几个特性。

1、原子性(保证事务的整体性)

原子性:要么所有操作成功,要么全部失败。整个事物中所有操作要么全部成功执行,要么全部失败回滚。

  • 事务是一个完整的操作,事务的各元素是不可分的。
  • 事务中的所有元素必须作为一个整体提交或回滚。
  • 如果事务中的任何元素失败,则整个事务将失败。

2、一致性(保证数据的完整性)

一致性:保证前后数据要一致。数据库总是从一个一致性状态转换为另一个一致性状态类似于质量守恒。

  • 当事务完成时,数据必须处于一致状态 。
  • 在事务开始前,数据库中存储的数据处于一致状态。
  • 在正在进行的事务中,数据可能处于不一致的状态。
  • 当事务成功完成时,数据必须再次回到一致状态。

3、隔离性

隔离性:事务之间的操作互相不干扰。一个事务所做出的操作提交之前,是不能为其他事务所见。

  • 对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
  • 修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一一个使用相同数据的事务结束之后访问这些数据。
  • 也就是说并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。

4、持久性

持久性:一旦commit 永久存储在磁盘上。一旦事务提交,其所做的修改会永久保存在数据库。

  • 指不管系统是否发生故障,事务处理的结果都是永久的。
  • 一旦事务被提交,事务的效果会被永久地保留在数据库中。

5、事务之间的相互影响

当多个客户端并发地访问同一表时,可能出现下面的一致性问题:

(1)脏读:事务A事务B同时进行两个事务可以互相看到对面的操作

(2)不可重复读:事务A和事务B同时进行,事务A提交后,事务B不提交也能看到

(3)幻读:事务A 事务B 无论在什么情况下都只能看到初始状态

(4)串读:事务A 事务B是老死不相往来,看不到。

三、事务控制语句

BEGIN 或 START TRANSACTION: 显式地开启一个事务。

COMMIT 或 COMMITWORK: 提交事务,并使已对数据库- - 进行的所有修改变为永久性的。

ROLLBACK 或 ROLLBACK WORK: 回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。

SAVEPOINT S1: 使用SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个SAVEPOINT;“S1”代表回滚点名称。

ROLLBACK TO [SAVEPOINT] S1: 把事务回滚到标记点。

1、测试begin和commit(开始事务和提交事务)

begin:显示开启一个事务。

commit:提交事务,并对数据库进行所有的修改变为永久性的。

  use sdb;
 create table account (
 id int(10) primary key not null,
 name varchar (40),
 money double
 );
 insert into account values('01','李华','1600');
 insert into account values('02', '张三', '1000');
 insert into account values('03', '李四', 3000);

在这里插入图片描述
创建的时候会报个错
在这里插入图片描述

alter database 表名 character set utf8;  #修改字符集

例1:begin开启事务,修改数据未提交,退出后重新连接查看,数据未改变。
在这里插入图片描述
在这里插入图片描述
例2:begin开启事务,修改数据后commit提交,退出后重新连接查看,数据改变。
在这里插入图片描述
在这里插入图片描述
例3当前全局事务隔离级别和会话事务隔离级别都为RU(未提交读) ,允许脏读。

则事务A在提交前,事务B可以看到A未提交的修改。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例4全局事务隔离级别和会话事务隔离级别都为RC(提交读)。 防止脏读,但不可重复读。

事务A在提交前的修改,事务B看不到。

事务A提交后,事务B可以看到修改的数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例5:全局事务隔离级别和会话事务隔离级别都为RR(可重复读)。 可以防止脏读和不可重复读。

事务A修改数据未提交,开启事务B进行查看,看到的是修改前的数据。

事务A提交后,事务B查看到的仍然是修改前的数据。

事务B在结束前,查询到的结果是一致的。事务A做的修改不影响事务B的查询结果。
在这里插入图片描述
在这里插入图片描述

2、测试事务回滚rollback

rollback:回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
在这里插入图片描述
在这里插入图片描述

总结

事务的ACID特性:原子性(Atomicity)、一致性(Consistency )、隔离性(Isolation)、持久性(Durability)

事务之间的相互影响:当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:脏读、不可重复读、幻读、丢失更新

事务的隔离级别:

未提交读(Read Uncommitted(RU)) : 允许脏读。

提交读(Read Committed (RC)) : 防止脏读。

可重复读(Repeatable Read(RR)): —mysql默认的隔离级别,防止脏读和不可重复读。

串行读(serializable):—相当于锁表, 可以防止脏读、不可重复读和幻读,(事务串行化)会降低数据库的执行效率。

事务控制语句:

BEGIN 或 START TRANSACTION: 显式地开启一个事务。
COMMIT 或 COMMITWORK: 提交事务,并使已对数据库进行的所有修改变为永久性的。
ROLLBACK 或 ROLLBACK WORK: 回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
SAVEPOINT S1: 使用SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个SAVEPOINT;“S1”代表回滚点名称。

COMMIT 或 COMMITWORK: 提交事务,并使已对数据库进行的所有修改变为永久性的。
ROLLBACK 或 ROLLBACK WORK: 回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
SAVEPOINT S1: 使用SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个SAVEPOINT;“S1”代表回滚点名称。
ROLLBACK TO [SAVEPOINT] S1: 把事务回滚到标记点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值