mysql for update用处_for update的作用和用法

一、for update定义

for update是一种行级锁,又叫排它锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行.如果其它用户想更新该表中的数据行,则也必须对该表施加行级锁.即使多个用户对一个表均使用了共享更新,但也不允许两个事务同时对一个表进行更新,真正对表进行更新时,是以独占方式锁表,一直到提交或复原该事务为止。行锁永远是独占方式锁。

只有当出现如下之一的条件,才会释放共享更新锁:

1、执行提交(COMMIT)语句

2、退出数据库(LOG OFF)

3、程序停止运行

二、概念和用法

通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作。同时,在多版本一致读机制的支持下,select语句也不会被其他类型语句所阻碍。

而select … for update 语句是我们经常使用手工加锁语句。在数据库中执行select … for update ,大家会发现会对数据库中的表或某些行数据进行锁表,在mysql中,如果查询条件带有主键,会锁行数据,如果没有,会锁表。

由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住)。

举个例子: 假设有张表user ,里面有 id 和 name 两列,id是主键。

例1: (明确指定主键,并且数据真实存在,row lock)

SELECT * FROM user WHERE id=3 FOR UPDATE;SELECT * FROM user WHERE id=3 and name='Tom' FOR UPDATE;

例2: (明确指定主键,但数据不存在,无lock)

SELECT * FROM user WHERE id=0 FOR UPDATE;

例3: (主键不明确,table lock)

SELECT * FROM user WHERE id<>3 FOR UPDATE;SELECT * FROM user WHERE id LIKE '%3%' FOR UPDATE;

例4: (无主键,table lock)

SELECT * FROM user WHERE name='Tom' FOR UPDATE;

注意:

1、FOR UPDATE仅适用于InnoDB,且必须在事务处理模块(BEGIN/COMMIT)中才能生效。

2、要测试锁定的状况,可以利用MySQL的Command Mode(命令模式) ,开两个视窗来做测试。

3、Myisam 只支持表级锁,InnerDB支持行级锁 添加了(行级锁/表级锁)锁的数据不能被其它事务再锁定,也不被其它事务修改。是表级锁时,不管是否查询到记录,都会锁定表。

三、什么时候需要使用for update?

借助for update语句,我们可以在应用程序的层面手工实现数据加锁保护操作。就是那些需要业务层面数据独占时,可以考虑使用for update。

场景上,比如火车票订票,在屏幕上显示有票,而真正进行出票时,需要重新确定一下这个数据没有被其他客户端修改。所以,在这个确认过程中,可以使用for update。

四、for update悲观锁

悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它解锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。就像for update,再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。

乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python大数据零基础_零基础学习大数据人工智能,学习路线篇!

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统&#xff0c;这两个是学习大数据的基础&#xff0c;学习的顺序不分前后。Python&#xff1a;Python 的排名从去年开始就借助人工智能持续上升&#xff0c;现在它已经成为了语言排行第一名。从学习难易度来看…

python删除文件和linux删除文件区别_使用Python批量删除文件列表

使用Python批量删除文件列表环境&#xff1a;已知要删除的文件列表&#xff0c;即确定哪些文件要删除。代码如下&#xff1a;#!/usr/bin/env python#codingutf-8#目的&#xff1a;本程序主要为删除给定的文件列表import osimport shutil#引入模块&#xff0c;os为包含普遍的操作…

华为python有必要学吗_【华为云技术分享】这个 Python 库有必要好好学学

这里看一个最基本的例子&#xff0c;这里给到一个 User 的 Class 定义&#xff0c;再给到一个 data 数据&#xff0c;像这样&#xff1a;1 class User(object):2 def __init__(self, name, age):3 self.name name4 self.age age56 data [{7 name: Germey,8 age: 239 }, {10 nam…

python求平行四边形面积_python 已知平行四边形三个点,求第四个点的案例

我就废话不多说了&#xff0c;大家还是直接看代码吧&#xff01;import numpy as np#已知平行四边形三个点&#xff0c;求第四个点#计算两点之间的距离def CalcEuclideanDistance(point1,point2):vec1 np.array(point1)vec2 np.array(point2)distance np.linalg.norm(vec1 -…

eview面板数据之混合回归模型_【视频教程】Eviews系列25|面板数据回归分析之Hausman检验及本章常见问题解答...

点击上方关注我们!本期我们学习Eviews统计建模最后一部分--面板数据回归分析Hausman检验及本章常见问题解答。实操&#xff1a;Hausman检验判断是固定效应模型还是随机效应模型上期我们讲到模型判断若选择模型2,需进一步通过Hausman检验判断固定效应还是随机效应&#xff0c;接…

python打出由边框包围的_python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)...

图像边框的实现图像边框设计的主要函数cv.copyMakeBorder()——实现边框填充主要参数如下&#xff1a;参数一&#xff1a;源图像——如&#xff1a;读取的img参数二——参数五分别是&#xff1a;上下左右边的宽度——单位&#xff1a;像素参数六&#xff1a;边框类型&#xff1…

mysql5.7.21备份脚本_Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本

#!/bin/sh#db_backups_conf.txt文件路径db_backups_conf"/wocloud/shell/db_backups_conf.txt"#判断文件是否存在if [ -f "${db_backups_conf}" ];thenecho $(date %Y-%m-%d %H:%M:%S)" 数据库配置信息文件存在&#xff0c;开始进行数据备份"#获…

python嵌套列表操作_python基础(list列表的操作,公共方法,列表嵌套,元祖)...

list 列表索引&#xff0c;切片与str相同。列表的操作(增删改查)1&#xff0c;增加.append()  追加&#xff0c;增加到最后li [alex,wusir,egon,女神,taibai]li.append(ppp)print(li).insert()  中间插入&#xff0c;通过索引li [alex,wusir,egon,女神,taibai]li.insert(…

mybatis mysql selectkey_Mybatis示例之SelectKey的应用

SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题&#xff0c;他可以很随意的设置生成主键的方式。不管SelectKey有多好&#xff0c;尽量不要遇到这种情况吧&#xff0c;毕竟很麻烦。SelectKey需要注意order属性&#xff0c;像Mysql一类支持自动增长类型的…

python程序设计上机实践第三章答案_20192419 实验三《Python程序设计》实验报告

学号 2019-2020-2 《Python程序设计》实验3报告课程&#xff1a;《Python程序设计》班级&#xff1a;1924姓名&#xff1a; 万腾阳学号&#xff1a;20192419实验教师&#xff1a;王志强实验日期&#xff1a;2020年5月16日必修/选修&#xff1a; 公选课1.实验内容创建服务端和客…

完成数独的算法 python_python实现数独算法实例

本文实例讲述了python实现数独算法的方法。分享给大家供大家参考。具体如下&#xff1a;# -*- coding: utf-8 -*-Created on 2012-10-5author: Administratorfrom collections import defaultdictimport itertoolsa [[ 0, 7, 0, 0, 0, 0, 0, 0, 0], #0[ 5, 0, 3, 0, 0, 6, 0, …

python读取多个文件csv_Python:读取多个文本文件并写入相应的csv文件

我在别处找不到这个问题的答案&#xff0c;所以我将继续把它贴在这里&#xff1a;我有一个Python脚本&#xff0c;它将读取文本文件的内容&#xff0c;将其内容拆分为单词&#xff0c;然后输出一个CSV文件&#xff0c;该文件将文本缩减为单词频率列表。(最后&#xff0c;我将插…

java treetable_在Swing中创建TreeTable | 学步园

TreeTable是Tree和Table的一个结合&#xff0d;就是一个即能够展开和收起行&#xff0c;同时也能够显示多个列的组件。在Swing的标准包里没有一个叫做JtreeTable的组件&#xff0c;但是我们很容易通过把Jtree做成Jtable的渲染器来创建一个这样的组件。这篇文章就是关于如何使用…

python爬去微博十大流行语_用python重新定义【2019十大网络流行语】-后台/架构/数据库-敏捷大拇指-一个敢保留真话的IT精英社区...

↑关注 置顶 ~ 有趣的不像个技术号52568040f9313098ffa367d9d9d21437.jpg (5.73 KB, 下载次数: 0)2019-12-10 04:43 上传3f4d5fe0016d011a7a68af763314befd.jpg (1.06 KB, 下载次数: 0)2019-12-10 04:43 上传“文明互鉴真硬核&#xff0c;融梗柠檬谁觉得。霸凌第一九九六&…

java中怎么获取配置文件的值_java如何获取配置文件的值

转&#xff1a;原创 编码小王子 发布于2018-10-11 18:07:52 阅读数 2722 收藏展开java大型项目中都会很多系统常量,比如说数据库的账号和密码,以及各种token值等,都需要统一的管理,如果零落的散布到各个类等具体的代码中的话,在后期管理上将是一场灾难,所有需要对这些变量进行统…

python实现队列_用Python实现的数据结构与算法:队列

一、概述队列(Queue)是一种先进先出(FIFO)的线性数据结构&#xff0c;插入操作在队尾(rear)进行&#xff0c;删除操作在队首(front)进行。二、ADT队列ADT(抽象数据类型)一般提供以下接口&#xff1a;Queue() 创建队列enqueue(item) 向队尾插入项dequeue() 返回队首的项&#xf…

java 监听窗口是否改变_JAVA项目监听文件是否发生变化

一.spring容器都初始化完成之后做操作packagecom.bijian.study.listener;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.ApplicationListener;importorg.springframework.context.event.ContextRefreshedEvent;importorg.s…

笨办法学python3 pdf 脚本之家_解决python3输入的坑——input()

如下所示&#xff1a;a,b,c,d input()很简单的代码&#xff0c;如果输入为1 -1 -2 3结果会报错&#xff0c;原因在于input函数会将你的输入作为python脚本运行&#xff0c;那么输入就变成了1-1 -2 3&#xff0c;即0 -2 3结果当然是错误的了&#xff0c;解决办法就是将输入用引…

java 数组写法_java书写、数据类型、数组定义

这里只记录java与php、javascript不同的地方&#xff0c;相同的地方就不赘述了。1.java文件源码为以.java为后缀的文件&#xff0c;字节码文件是以.class为后缀的文件。2.写好一个java源码之后&#xff0c;cmd进入源码文件盘符&#xff0c;用命令 javac helloworld.java将源码转…

python爬虫高级知识点_Python爬虫知识点梳理总结,殿堂级小白入门必读

数据分析是任何技术一样。你应该学习的目标。目标就像灯塔,指引你前进。我见过很多合作伙伴学习学习,然后学会放弃。事实上,很大一部分原因是没有明确的目标,所以你必须清楚学习的目的。你准备学习爬行之前,问问你自己为什么你想学爬行。有些人为了工作,一些为了好玩,和做一定黑…