携手创作,共同成长!这是我参与「掘金日新计划 · 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):一个事务一旦被提交,它对数据库的改变是永久性的
结语
大佬请留步既然看到这了不如点个赞👍再走吧 本文目的在于分享技术以及在学习过程中个人记得需要注意的点,记录学习过程; 如果出现错误欢迎大家指正,如有意见或建议欢迎在评论区讨论