mysql的事务,隔离级别和锁用法实例分析


本文整理自网络,侵删。

本文实例讲述了mysql的事务,隔离级别和锁用法。分享给大家供大家参考,具体如下:

事务就是一组一起成功或一起失败的sql语句。事务还应该具备,原子性,一致性,隔离性和持久性。

一、事务的基本要素 (ACID)

1、原子性:事务开始后,所有的操作,要么全部成功,要么全部失败,不可能处于中间状态,事务是一个不可分割的整体,就像原子一样。

2、一致性:事务开始前和结束后,数据库的完整性约束没有破坏,A向B转账,A扣了钱,但B却没到账。

3、隔离性:同时发生的事务(并发事务)不应该导致数据库处于不一致的状态中,每个事务都独立执行,不影响其他事务的存在。

4、持久性:事务对数据库的更改都会保存在磁盘上,不会丢失。

二、事务的并发问题

1、脏读:事务A读取了事务B未提交的写入数据,读取到的数据就称为脏数据

2、不可重复读:事务A多次读取同一数据,但在读取过程中,事务B对数据做了修改,并提交了。导致多次读取同一数据,结果不一样。

3、幻读:事务A对表中所有数据行进行了修改,比如设置status = 1,但同时,事务B往该表插入了一行新数据status = 0,对于操作事务A的用户而言,表中还有一条记录没被修改,就像发生幻觉一样。

三、事务隔离性的四个级别

事务隔离级别 脏读 不可重复读 幻读
读取未提交 read uncommitted

读已提交 read committed

×

可重复读取 repeatable read

×

×

序列化 serializable

×

×

×

四、获取和设置数据库隔离级别

SHOW VARIABLES LIKE '%isolation%';
SHOW GLOBAL VARIABLES LIKE '%isolation%';

使用系统变量查询

SELECT @@GLOBAL.tx_isolation;
SELECT @@SESSION.tx_isolation;
SELECT @@tx_isolation;

对于mysql8而言,使用下面的变量进行查询

SELECT @@GLOBAL.transaction_isolation;
SELECT @@SESSION.transaction_isolation;
SELECT @@transaction_isolation;

设置隔离级别

SET GLOBAL tx_isolation = '隔离级别';
SET SESSION tx_isolation = '隔离级别';
SET @@tx_isolation = '隔离级别';

对于mysql8而言,使用下面语句进行设置

SET GLOBAL transaction_isolation = '隔离级别';
SET SESSION transaction_isolation = '隔离级别';
SET @@transaction_isolation = '隔离级别';

五、通过例子说明各隔离级别的情况

阅读剩余部分

相关阅读 >>

mysql无法创建视图怎么办

数据库高并发请求,如何保证数据完整性?详解mysql/innodb的加锁

navicat如何能连接mysql

mysql读写锁怎么添加?

实例详解阿里云下配置mysql远程连接步骤

python操作mysql数据库的简单步骤分享

mysql当前时间怎么表示

mysql创建分区的方法实例

mysql shell是什么

mysql设计规范与原则

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...