Mysql事务

91 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情 >>

📖个人介绍

大家好我是:Zinksl

认真分享技术,记录学习点滴 如果分享对你有用请支持我哦🍺

点赞:👍 留言:✍收藏:⭐️ 个人格言: 想法落实的最佳时机就是现在!🏄


概念:事务用于保证数据的一致性,它由一组dml语句组成,该组的dml语句要么全部成功,要么全部失败
InnoDB存储引擎支持事务

1 事务和锁

当执行事务时,mysql会在表上加锁,防止其他用户修改表数据;

1.1 mysql控制事务的几个重要操作

名称说明
start transaction开始一个事务
savepoint设置保存点 设置保存点
rollback to保存点名 回退事务
rollback回退全部事务
commit提交事务,所有操作生效,不能回退

1 创建表

CREATE TABLE t21(

id INT NOT NULL ,
name VARCHAR(10)
)

2 开始事务

START TRANSACTION

3 设置一个保存点

SAVEPOINT apoint

4 执行一个dml操作

INSERT INTO t21 VALUES(001,'张三')

SELECT * FROM t21

5 设置另一个保存点

SAVEPOINT bpoint

6 执行一个dml操作

INSERT INTO t21 VALUES(002,'王五')

SELECT * FROM t21

回退到bpoint

ROLLBACK  TO bpoint

直接回退到事务开始的地方

ROLLBACK

COMMIT 提交事务,提交事务后所有的保存点会删除,释放锁,数据生效,其他会话就能查到数据

2 事务的隔离级别

隔离级别介绍:多个连接开启各自事务操作数据库时,数据库系统要负责隔离操作,以保证各个连接获取数据的准确性;
如果不考虑隔离级别可能引发:脏读、不可重复读、幻读;
脏读:当一个事务读取另一个事务,没有提交的修改时产生脏读
不可重复读:同一个查询在同一事务中出现多次进行,由于其他事务做的删除修改等操作,每次返回不同结果集
幻读:同一个查询在同一事务中出现多次进行,由于其他事务做的插入等操作,每次返回不同结果集

隔离级别脏读不可重复读幻读加锁读
读未提交(Read Uncommitted)不加
读已提交(Read Committed)×不加
可重复读(Reapetable read)×××不加
可串行化(Serializable)×××加锁

设置隔离级别 设置隔离级别 为读未提交【Read UNCOMMITTED】

 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

查询隔离级别

SELECT @@transaction_isolation;

3 事务的特性

3.1 原子性(Atomicity):指事务是一个不可分割的工作单位,事务中的操作要么都成功,要么都失败

3.2 一致性(Consistentcy):事务必须是数据库从一个一致性状态到另一个一致性状态。

3.3 隔离性(Isolation):指数据库多个用户并发访问数据库时,数据库每个用户开启一个事务,不能被其他事务的操作所干扰,多个并发事务之间相互隔离

3.4 持久性(Durability):一个事务一旦被提交,它对数据库的改变是永久性的

结语

大佬请留步在这里插入图片描述既然看到这了不如点个赞👍再走吧 本文目的在于分享技术以及在学习过程中个人记得需要注意的点,记录学习过程; 如果出现错误欢迎大家指正,如有意见或建议欢迎在评论区讨论