事务

事务

1、保证数据一致性,由一组相关 DML 语句组成,要么全成功,要么全失败

2、执行事务操作时,MySQL 会在表上加锁,防止其他用户修改表的数据

3、基本操作

(1)开始一个事务

START TRANSACTION;

BEGIN;

SET autocommit=off;

(2)设置保存点

SAVEPOINT 保存点名;

(3)回退事务

ROLLBACK TO 保存点名;

(4)回退所有事务

ROLLBACK;

(5)提交事务

COMMIT;

4、事项

(1)不开始事务,默认 DML 语句自动提交事务

(2)InnoDB 引擎支持 MySQL 事务机制,MyISAM 不支持

(3)执行 COMMIT 后,确认事物变化,结束事务、删除保存点、释放锁、数据生效

(4)COMMIT 结束事务生效后,其他会话(其他连接)可以查看事务变化后的新数据,即所有数据正式生效

5、事务 ACID 特性

(1)原子性:Atomicity,事务中的操作要么全部生效,要么全部失效

(2)一致性:Consistency,事务必须使数据库从一个一致性状态,变换到另一个一致性状态

(3)隔离性:Isolation,多并发事务之间隔离

(4)持久性:Durability,事务一旦提交,改变是永久性的

 

事务隔离

1、多个连接开启各自事务操作数据库,系统负责隔离,保证各个连接在获取数据时的准确性

2、不隔离的问题

(1)脏写:A 事务修改 B 事务未提交的修改

(2)脏读:A 事务读取 B 事务未提交的修改

(3)不可重复读:A 事务读取两次数据的过程中,B 事务修改数据,导致 A 读取的数据前后不一

(4)幻读:A 事务读取两次数据的过程中,B 事务添加 / 删除数据,导致 A 读取的数据前后不一

3、事务隔离级别:定义事务之间的隔离程度

MySQL 事务隔离级别 脏读 不可重复读 幻读 加锁读
读未提交:READ UNCOMMITTED 可能出现 可能出现 可能出现 不加锁
读已提交:READ COMMITTED 不会出现 可能出现 可能出现 不加锁
可重复读:REPEATABLE READ 不会出现 不会出现 可能出现 不加锁
可串行化:SERIALIZABLE 不会出现 不会出现 不会出现 加锁

(1)默认 REPEATABLE READ,满足大部分需求

4、相关操作

(1)查看当前会话隔离级别

SELECT @@tx_isolation;

(2)查看系统当前隔离级别

SELECT @@global.tx_isolation;

(3)设置当前会话隔离级别

SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;

(4)设置系统当前隔离级别

SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别;

5、全局修改

(1)修改 my.ini 配置文件,设置默认的事务隔离级别

transaction-isolation = READ-UNCOMMITTED
transaction-isolation = READ-COMMITTED
transaction-isolation = REPEATABLE-READ
transaction-isolation = SERIALIZABLE

(2)需要重启 MySQL 服务才会生效

posted @   半条咸鱼  阅读(24)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示