一、MySQL并发访问控制

1.并发控制机制

(1)锁机制

资源竞争时候,多个线程表示多个用户会话;通过读写锁机制实现

读锁:共享锁,可以多个用户同时读取同一资源文件

写锁:独占锁,当一个用户对资源文件进行写操作时,其他线程既不能读也不能写

(2)锁粒度

表级锁:对于整个表进行的锁操作,并发处理有限,在线事务处理读写一样多时会出问题

行级锁:对于部分资源的锁操作

(3)锁策略

在锁粒度及数据安全性寻求的平衡机制;每种存储引擎都可以自行实现其锁策略和锁粒度;

MySQL在服务器级也实现了锁,表级锁;而Innodb自行实现了行级锁,而无需人为干预

(4)锁分类

隐式锁:由存储引擎自动施加锁;

显式锁:手动添加

2.命令行施加锁

(1) LOCK TABLES    tbl_name[[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] …  READ[LOCAL] | [LOW_PRIORITY] WRITE

指明锁定表和锁类型,可一次指明多个表,还可以加别名;服务器层面表级别锁

lock_type所类型:READ、WRITE

UNLOCKTABLES;

(2)FLUSH TABLEStb_name[,...] [WITH READ LOCK] [FOR UPDATE]

FLUSH清理,把表写到磁盘关闭再打开

UPDATE更新

(3) SELECT clase[FOR UPDATE] [WITH READ LOACK]

二、MySQL事务操作

1.ACID测试

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

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

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

隔离级别越高,意味着数据安全性越高,但并发性越低

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

2.事务概念

事务是一组原子性的SQL查询语句,是一个独立工作单元。当操作需要多步骤完成时候,为了保证安全或者数据完整性而引入的机制,其执行的一组语句要么全部都执行,要么在无法中断时候能够回顾,使得数据还原。

例如:银行系统中的转账操作需要保证事务一致

3.事务流程

第一步:显示启动事务语句:START TRANSACTION;

...执行的SQL语句

...

第二步:结束事务方式:

(1) COMMIT:提交,写入到数据库文件中确保永久有效

(2) ROLLBACK: 回滚

注意:

1)只有事务型存储引擎方能支持此类操作;例如Inoodb支持事务、MyISAM不支持事务

2)建议显式请求和提交事务,而不要使用“自动提交autocommit”功能,每一次提交都会进行IO操作,降低系统性能

MariaDB[(none)]> SHOW GLOBAL VARIABLES LIKE 'autocommit';

autocommit={1|0},0表示关闭off

临时修改实例:

MariaDB [(none)]> SET SESSIONautocommit=0;#设置会话界别的自动提交

MariaDB[(none)]> SHOW VARIABLES  LIKE'autocommit';

3)事务支持savepoint(保存点),在进行中加入保存点可以指定点回滚,若无savepoint则必须回滚到起始处

SAVEPOINT identifier指明标识符

ROLLBACK [WORK] TO[SAVEPOINT] identifier回滚到标识点

RELEASE SAVEPOINTidentifier删除标识点

实例:

MariaDB[(none)]> SAVEPOINT sp1

MariaDB[(none)]> SAVEPOINT sp2

MariaDB[(none)]> SAVEPOINT sp3

MariaDB[(none)]> ROLLBACK  TO sp2

4.事务隔离级别:mysql支持到第三级别

(1)隔离级别

READ UNCOMMITTED (读未提交):问题一、二、三

READ COMMITTED (读提交):问题二、三

REPEATABLE READ (可重读):问题三

SERIALIZABILE (可串行化):问题四

注意:

隔离级别越低可能存在的问题可能性越大;可能存在问题:问题一:脏读读取到别人尚未提交的数据

问题二:不可重复读两次读取别人提交的数据不一致

问题三:幻读对方提交修改数据,自己在一次事务中认为没有发生变化

问题三:加锁读加上锁之后,其他用户无法读取

(2)修改隔离级别

MariaDB [(none)]>SHOWPROCESSLISTS;   #查看连接线程

注释:

tx_isolation:服务器变量,默认为REPEATABLE-READ;可在SESSION级进行修改;

MariaDB[(none)]>SETtx_isolation=''

READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE

注意:

可能会出现死锁问题:两个或多个事务在同一资源相互占用,并请求锁定对方占用的资源的状态;

各存储引擎自己有死锁检测和死锁超时机制,检测死锁的循环依赖发送错误通知

不能解决死锁问题会导致查询非常慢

4.事务日志文件

(1)预写式日志

事务日志帮助实现崩溃后挥发,是保证数据持久、回滚、提高事务效率的一个重要工具。

事务日志的写入类型为"追加",不是修改数据,使用的是一段连续的空间,其操作为"顺序IO",避免了写数据文件造成的大量随机IO,保证快速的将提交的操作持久存储在磁盘上,再刷写到硬盘上;该日志通常也被称为"预写式日志(writeahead logging)";

在Orcal中分为:redolog、undolog重做日志和撤销日志

(2)mysql事务日志参数innodb_log_file_size日志文件大小

innodb_log_files_in_group同一组中有多少文件

innodb_log_group_home_dir一组日志文件存放的位置,/表示mysql数据的工作目录

innodb_log_buffer_size存储日志时的缓冲

innodb_log_block_size日志块的大小

注意:

1)不支持运行修改,需要修改配置文件后重启;

2)建议不要使用太大的事务日志空间,防止崩溃恢复

3)不要混合使用不同的存储引擎,因为事务日志是不一致的

4)崩溃后的恢复时间取决于事务日志的大小和其中所存储的事务日志的数量

mysql事务机制_MySQL系列:事务机制相关推荐

  1. mysql事务并发控制_MySQL之事务及并发控制

    本节索引: 一.事务Transaction 二.事务的隔离级别 三.并发控制 四.MVCC-多版本的并发控制协议 一.事务 什么是事务? 事务Transactions:一组原子性的SQL语句,或一个独 ...

  2. mysql 数据库事务处理_MySQL数据库事务及其原理

    基本概念 MySQL 事务主要用于处理操作量大,复杂度高的数据. 银行转账是经典的解释事务的例子.用户A给用户B转账5000元主要步骤可以概括为如下两步. 第一,账户A账户减去5000元: 第二,账户 ...

  3. mysql事务 并发_Mysql关于事务并发带来的问题

    MySQL从5.5.8开始,Innodb就是默认的存储引擎,Innodb最大的特点是:支持事务.支持行级锁. 既然支持事务,那么就会有处理并发事务带来的问题:更新丢失.脏读.不可重复读.幻读:相应的为 ...

  4. mysql 5.1支持事务吗_MySQL的事务和隔离级别 | 旺旺知识库

    一.什么是事务? 数据库的事物,是指将一系列的操作作为一个逻辑单元来执行,即加入由十条SQL语句组成的一个事物,则要么则十条都执行成功,要么都不执行!事务处理可以确保除非事务性单元内的所有操作都成功完 ...

  5. mysql 长事务查询_MySQL长事务详解

    前言: 『入门MySQL』系列文章已经完结,今后我的文章还是会以MySQL为主,主要记录下近期工作及学习遇到的场景或者自己的感悟想法,可能后续的文章不是那么连贯,但还是希望大家多多支持.言归正传,本篇 ...

  6. mysql 业务账户_mysql的事务

    一.事务定义 Transaction 事务:一个最小的不可再分的工作单元:通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元) 一个完整的业务需要批量的DML(inse ...

  7. mysql有三种事务模式_MySQL之事务与三大范式

    一.MySQL事务 在MySQL中将一组有序的增删改操作看做一个独立的执行单元,当这一组所有的操作都成功,事务执行成功,如果其中有一个操作失败,事务执行回滚.MySQL 事务主要用于处理操作量大,复杂 ...

  8. 什么是mysql事物定义_MySQL中事务概念的简洁学习教程

    事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.程序和事务是两个不同的概念.一般而言:一段程序中可能包含多个事务. 事务具有四个特性:原子性(Atomici ...

  9. mysql会话事务隔离_MySQL的事务隔离级别

    MySQL的事务隔离级别 隔离级别 1.事务的隔离级别决定了事务之间可见的级别. 2.当多个客户端并发地访问同一个表时,可能出现下面的一致性问题: ● 脏读取(Dirty Read) 一个事务开始读取 ...

  10. 一条mysql语句是事务吗_mysql中事务

    事务控制语言 什么叫做"事务": 想象一个场景: 小明给小花 汇款 5000元 买IPHONE,操作界面不用管,不管什么操作界面,最终都要落实到这样两条语句的执行: update ...

最新文章

  1. 【AI】【机器人】AI与机器人的42个终极问题与解答
  2. lucene搜索之facet查询原理和facet查询实例——TODO
  3. 控制反转容器依赖注入模式(转)
  4. 曾经案例中问题 与 工厂模式解耦
  5. 连接第二个 insance 到 first_local_net - 每天5分钟玩转 OpenStack(83)
  6. IDEA第一个mybatis程序 mybatis增删查改操作 mybatis的map模糊查询
  7. 使用oauth2.0自动获取用户信息
  8. CentOS6.x 下 /etc/security/limits.conf 被改错的故障经历
  9. 独家 | 一文读懂自然语言处理NLP(附学习资料)
  10. 谷歌提出 RNN 版 Transformer,或为长文本建模的当前最优解
  11. oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。...
  12. 一步一步安装SQL Server 2008(附截图)
  13. C++函数调用时堆栈的变化情况
  14. php 怎么验证邮箱验证码,PHP 验证邮箱是否有效 - 沃森博客
  15. B+树 mysql
  16. mybatis输出SQL格式化
  17. 海康DS-2DY5223IW-DM
  18. 关于sfc /scannow后主题文件的重置
  19. 数据的正态性检验汇总
  20. 用matlab解根3乘根2,数学人教版七年级下册算术平方根教学设计.docx

热门文章

  1. 深入浅出讲解:php的socket通信
  2. Basic操作系统概念梳理
  3. 新款苹果电脑_苹果发布新款MacBookAir 搭载M1芯片7999起
  4. ajax无刷新页面切换,历史记录后退前进解决方案
  5. Web如何应对流量劫持?
  6. 三次握手和四次挥手详细介绍
  7. lnmp应用服务器安装手册
  8. 华硕笔记本卸载并重新安装Ubuntu16.04
  9. java导出oracle到excel_java实现将oracle表中的数据导出到excel表里
  10. 百度地图的两套JavaScript API