MySQL笔记(八):事务

一、事务

事务用于保证数据的一致性,它由一组相关的dml组成,该组的dml语句要么全部成功,要么全部失败:转账。

事务和锁:当执行事务操作时(dml语句),mysql会在表上加锁,防止其他用户改表的数据

mysql数据控制台事物的几个重要操作

1、start transaction -- 开始一个事务
2、 savepoint 保存点名 --设置保存点
3、rollback to --回退事务
4、 rollback --回退全部事务
5、 comiit -- 提交事务,所有操作生效,不能回退

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

回退的过程中,会删除回退点之前的保存点

在这里插入图片描述


#讨论事务细节

-- 1、如果不开始事务,默认情况下,dml操作是自动提交的,不能回滚

INSERT INTO t27 VALUES(3,'milan');

SELECT * FROM t27;-- 上一节rollback已经回退到开始事物的点了,所以只有新添加的一条数据

-- 2、如果开始一个事务,你没有创建保存点,可以执行rollback,默认就是回退到事务开始的状态

START TRANSACTION

INSERT INTO t27 VALUES(4,'kitty');

INSERT INTO t27 VALUES(5,'scott'0:

ROLLBACK;-- 表示直接回退到事务开始的状态,因为中途的dml操作没有设置保存点,只有开始状态的默认保存点


-- 3、你也可以在这个事务中(还没有提交时),创建多个保存点,比如:savepoint
-- 执行dml,savepoint bbb

-- 4、你可以在事务没有提交前,回退到任何一个保存点

-- 5、innoDB存储引擎支持事务,myISAM不支持

-- 6、开始一个事务:start transaction,   set autocommit=off

二、事务的隔离级别

(1)介绍

	多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离事务,以保证各个连接在获取数据时的准确性
	如果不考虑隔离性,可能会引发:
	脏读:dirty read,当一个事务读取另一个事务尚未提交的修改时,产生脏读
	不可重复读:nonrepeatable read, 同一查询在同一事务中多次进行,由于其他连接提交事务所做的**修改或删除,**每次返回不同的结果集,发生不可重复读
	幻读:phantom read 同一查询在同一事务中多次进行,由于其他连接提交事务所做的**插入**,每次返回不同的结果集,产生幻读

(2)四种隔离级别

在这里插入图片描述

1)设置隔离级别为读未提交
在这里插入图片描述

幻读现象:另一个控制台应该只能读到本控制台事务开始的情况,但是本控制台发生操作后,另一个控制台也能捕捉到,这是不行的。

在这里插入图片描述

2)改变隔离级别为读已提交:在插入一条数据后,另一个控制台看不到

在这里插入图片描述

3)可重复读

演示不可重复读

在这里插入图片描述
在这里插入图片描述

4)可串行化:当一个连接正在操作数据库,并且没有commit时,另一个连接无法查询;一提交就可以查了

在这里插入图片描述
在这里插入图片描述

(3)设置隔离

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值