iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL事务隔离实现并发控制的示例分析
  • 413
分享到

MySQL事务隔离实现并发控制的示例分析

2023-06-20 13:06:28 413人浏览 八月长安
摘要

这篇文章主要介绍了MySQL事务隔离实现并发控制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、并发访问控制实现的并发访问的控制技术是基于锁;锁分为表级锁和行级锁

这篇文章主要介绍了MySQL事务隔离实现并发控制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、并发访问控制

实现的并发访问的控制技术是基于

锁分为表级锁和行级锁,MyISAM存储引擎不支持行级锁;InnoDB支持表级锁和行级锁;

锁的分类有读锁和写锁,读锁也被称为共享锁,加读锁的时候其他的人可以读;写锁也称为独占锁或排它锁,一个写锁会阻塞其他读操作和写操作;

锁还分为隐式锁和显式锁,隐式锁由存储引擎自行管理,显式锁是用户手动添加锁;

锁策略:在锁粒度及数据安全性寻求的平衡机制。

显式锁的使用方法:LOCK TABLES tbl_name READ|WRITE

MariaDB [school]> LOCK TABLES students READ;  #加读锁
MariaDB [school]> UNLOCK TABLES;  #解锁

读锁:任何人都不可写

写锁:自己可以读写,但是其他人不可读写

FLUSH TABLES tb_name :关闭正在打开的表(清除查询缓存),通常在备份前加全局读锁

SELECT clause [FOR UPDATE | LOCK IN SHARE MODE] 查询时加写或读锁

二、事务Transactions

一组原子性的sql语句,或一个独立工作单元

1、事务遵循ACID原则:

  • A:atomicity原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚

  • C:consistency一致性;数据库总是从一个一致性状态转换为另一个一致性状态

  • I:Isolation隔离性;一个事务所做出的操作在提交之前,是不能为其它事务所见;隔离有多种隔离级别,实现并发

  • D:durability持久性;一旦事务提交,其所做的修改会永久保存于数据库

2、事务的生命周期

MySQL事务隔离实现并发控制的示例分析

显式事务:明确的规定事务的开始

隐式事务:默认为隐式事务,每执行完一句语句后直接提交

autocommit = {OFF|ON} 开启或关闭自动提交,建议使用显式请求和提交事务,而不要使用“自动提交”功能

启动事务:START TRANSACTION;

插入标签:ROLLBACK TO ##;

撤销回指定标签:ROLLBACK TO ##;

全部撤销:ROLLBACK;

提交事务:COMMIT;

删除标签:RELEASE SAVEPOINT;

MariaDB [school]> START TRANSACTION;  #明确指明启动一个事务MariaDB [school]> INSERT students(StuID,Name,Age,Gender) VALUES (26,'Tom',22,'M');  #添加一条记录MariaDB [school]> SAVEPOINT sp26;  #插入一个标签MariaDB [school]> INSERT students(StuID,Name,Age,Gender) VALUES (27,'Maria',12,'F');  #再加入一条记录MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27);  #查看一下,可以看到刚刚插入的数据+-------+-------+-----+--------+---------+-----------+| StuID | Name  | Age | Gender | ClassID | TeacherID |+-------+-------+-----+--------+---------+-----------+|    26 | Tom   |  22 | M      |    NULL |      NULL ||    27 | Maria |  12 | F      |    NULL |      NULL |+-------+-------+-----+--------+---------+-----------+MariaDB [school]> ROLLBACK TO sp26;  #撤销到sp26标签之前的状态MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27);  #查看一下,刚刚maria的信息被撤回了+-------+------+-----+--------+---------+-----------+| StuID | Name | Age | Gender | ClassID | TeacherID |+-------+------+-----+--------+---------+-----------+|    26 | Tom  |  22 | M      |    NULL |      NULL |+-------+------+-----+--------+---------+-----------+MariaDB [school]> COMMIT;  #提交事务MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27);  #最终的数据+-------+------+-----+--------+---------+-----------+| StuID | Name | Age | Gender | ClassID | TeacherID |+-------+------+-----+--------+---------+-----------+|    26 | Tom  |  22 | M      |    NULL |      NULL |+-------+------+-----+--------+---------+-----------+

3、事务的隔离级别

  • READ UNCOMMITTED 其他事务可以看到未提交的脏数据,产生脏读

  • READ COMMITTED 提交后其他事务可以看到修改后的数据,每次读取的数据可能不一致,不可重复读

  • REPEATABLE READ 可重复读,每次看到的数据都一致,数据被修改后看不到最新数据,会产生幻读(默认设置)

  • SETIALIZABILE 未提交的读事务阻塞修改事务,串行执行,并发性差

mvcC: 多版本并发控制,和事务级别相关

MySQL事务隔离实现并发控制的示例分析

修改事务隔离级别:服务器变量tx_isolation指定,默认为REPEATABLE-READ,可在GLOBAL和SESSION级进行设置

tx_isolation

  • Description: The transaction isolation level. See also SET TRANSACTION ISOLATION LEVEL.

  • Commandline: --transaction-isolation=name

  • Scope: Global, Session

  • Dynamic: Yes

  • Type: enumeration

  • Default Value: REPEATABLE-READ

  • Valid Values: READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE

MariaDB [school]> SELECT @@tx_isolation;   #默认为可重复读级别+-----------------+| @@tx_isolation  |+-----------------+| REPEATABLE-READ |+-----------------+MariaDB [school]> SET tx_isolation='READ-UNCOMMITTED';MariaDB [school]> set tx_isolation='READ-COMMITTED';MariaDB [school]> set tx_isolation='REPEATABLE-READ';MariaDB [school]> set tx_isolation='SERIALIZABLE';

4、死锁

两个或多个事务在同一资源相互占用,并请求锁定对方占用的资源的状态会发生死锁

在A事务修改t1表的第3行,B事务修改t2表的第2行时;这时A事务去修改t2表的第2行,这时就把A事务阻塞了,然后B事务有刚刚好去修改t1表的第3行,这时B事务也被阻塞了,这时就产生了死锁。

俩个事务同时去更改对方的修改的表,互相阻塞;系统会发现死锁,会自动牺牲一个代价小的事务来解开死锁。

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

查看进程列表:MariaDB [school]> SHOW PROCESSLIST;

杀死进程:MariaDB [school]> KILL 5;

感谢你能够认真阅读完这篇文章,希望小编分享的“Mysql事务隔离实现并发控制的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL事务隔离实现并发控制的示例分析

本文链接: https://www.lsjlt.com/news/296996.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL事务隔离实现并发控制的示例分析
    这篇文章主要介绍了MySQL事务隔离实现并发控制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、并发访问控制实现的并发访问的控制技术是基于锁;锁分为表级锁和行级锁...
    99+
    2023-06-20
  • MySQL系列之十 MySQL事务隔离实现并发控制
    目录一、并发访问控制二、事务Transactions1、事务遵循ACID原则:2、事务的生命周期3、事务的隔离级别4、死锁一、并发访问控制 实现的并发访问的控制技术是基于锁; 锁分为...
    99+
    2024-04-02
  • MySQL事务的隔离级别与并发控制
    标题:深入探讨MySQL事务的隔离级别与并发控制 随着数据库应用场景的日益复杂,事务的隔离级别与并发控制成为了数据库管理中不可或缺的重要话题。MySQL作为一款广泛使用的关系型数据库管...
    99+
    2024-03-01
    mysql 并发 事务 并发访问
  • MySQL事务隔离级别的示例分析
    这篇文章将为大家详细讲解有关MySQL事务隔离级别的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内...
    99+
    2024-04-02
  • Mysql事务隔离级别原理的示例分析
    这篇文章主要介绍Mysql事务隔离级别原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!说说事务的隔离级别吧?老实说,事务隔离级别这个问题,无论是校招还是社招,面试官都爱问...
    99+
    2024-04-02
  • Mysql事务隔离级别之读提交的示例分析
    这篇文章主要为大家展示了“Mysql事务隔离级别之读提交的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mysql事务隔离级别之读提交的示例分析”这篇文...
    99+
    2024-04-02
  • 如何实现MySQL底层优化:事务的并发控制和隔离级别选择
    如何实现MySQL底层优化:事务的并发控制和隔离级别选择摘要:在MySQL数据库中,事务的并发控制和隔离级别的选择对于数据库性能和数据一致性非常重要。本文将介绍如何通过底层优化来实现MySQL事务的并发控制和隔离级别选择,并提供具体的代码示...
    99+
    2023-11-08
    MySQL 优化 事务
  • MySQL中事务控制对的示例分析
    这篇文章主要介绍MySQL中事务控制对的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是事务控制事务是指作为一个逻辑工作单元执行的一系列操作,这些操作要么全部成功,要么全...
    99+
    2024-04-02
  • MySQL中隔离级别的示例分析
    这篇文章主要介绍MySQL中隔离级别的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL入门--事务隔离级别1) 隔离级别介绍如果一个客户机的事务更改了数据,其他客户机的事务是应发现这些更改还是应与其隔...
    99+
    2023-06-01
  • MySQL和JDBC事务控制的示例分析
    这篇文章将为大家详细讲解有关MySQL和JDBC事务控制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、MySQL的事务控制(Transaction Cont...
    99+
    2024-04-02
  • MySQL中TCL事务控制语句的示例分析
    这篇文章给大家分享的是有关MySQL中TCL事务控制语句的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、事务的介绍与使用通过show engines;可以查看mysq...
    99+
    2024-04-02
  • Linq开放式并发控制的示例分析
    小编给大家分享一下Linq开放式并发控制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先让大家了解下Linq开放式并发控制,然后全面介绍Linq开放式...
    99+
    2023-06-17
  • MySQL RC事务隔离的实现原理
    摘要:Read Committed事务运行期间,只要别的事务修改数据并提交,即可读到人家修改的数据,所以会有不可重复读、幻读问题。ReadView机制基于undo log版本链条实现...
    99+
    2024-04-02
  • MySQL中大对象多版本并发控制的示例分析
    小编给大家分享一下MySQL中大对象多版本并发控制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL 8.0:I...
    99+
    2024-04-02
  • MySQL事务隔离机制与实现原理是什么
    这篇“MySQL事务隔离机制与实现原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2022-11-30
    mysql
  • 数据库并发控制的作用及示例分析
    数据库并发控制的作用及示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.数据库并发控制的作用1.1 事务的概念在介绍并发控制前,首先需...
    99+
    2024-04-02
  • MySQL事务的隔离性是如何实现的
    目录并发场景写-写读-读读-写 和 写-读MySQL中的锁行级锁表级锁隔离级别Read CommittedRepeatable Read参考博客并发场景 最近做了一些分布式事务的项目...
    99+
    2024-04-02
  • AmazonAurora是否支持多版本并发控制和事务隔离级别设置
    是的,Amazon Aurora支持多版本并发控制和事务隔离级别设置。具体来说,Amazon Aurora提供了多个事务隔离级别,包...
    99+
    2024-04-09
    AmazonAurora
  • MySQL中的事务隔离级别如何实现
    小编给大家分享一下MySQL中的事务隔离级别如何实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!说到数据库事务,大家脑子里一定...
    99+
    2024-04-02
  • Linux中Shell多进程并发以及并发数控制的示例分析
    这篇文章主要介绍了Linux中Shell多进程并发以及并发数控制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 基础知识准备1. linux后台进程Unix是一...
    99+
    2023-06-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作