美文网首页
MySQL事务+FOR UPDATE解决并发操作数据库

MySQL事务+FOR UPDATE解决并发操作数据库

作者: peng_js | 来源:发表于2017-10-27 10:50 被阅读0次

注意 FOR UPDATE 仅适用于InnoDB,且必须在事务区块(BEGIN/COMMIT)中才能生效。

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

例如下面几种情况

A.假设有个表单products ,里面有id 跟name 二个栏位,id 是主键。

(明确指定主键,并且有此数据,row lock也就是行锁)

SELECT * FROM products WHERE id='3' FOR UPDATE;

B.(明确指定主键,若查无此数据,无lock)

SELECT * FROM products WHERE id='-1' FOR UPDATE;

C.(无主键,table lock)

SELECT * FROM products WHERE name='Mouse' FOR UPDATE;

D .(主键不明确,table lock)

SELECT * FROM products WHERE id<>'3' FOR UPDATE;

SELECT * FROM products WHERE id LIKE '3' FOR UPDATE;

要测试锁定的状况,可以利用MySQL 的Command Mode ,开二个视窗来做测试

MySQL update && select

CREATE TABLE `testupdate` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`val` bigint(20) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

update testupdate

set val = val+1

where id = 1 and @value := val+1;

select @value;

相关文章

  • MySQL事务+FOR UPDATE解决并发操作数据库

    注意 FOR UPDATE 仅适用于InnoDB,且必须在事务区块(BEGIN/COMMIT)中才能生效。 由于I...

  • 数据库事务和锁

    数据库的事务什么是数据库的事务?数据库事务(transaction)是访问并发可能操作各种数据项的一个数据库操作序...

  • 2019-01-18

    1.MySQL事务隔离级别:事务隔离级别,解决什么并发问题,以及存在什么并发问题 (1)READ_UNCOMMIT...

  • 20171110 MySQL进阶(一)

    数据库基本概念回顾数据库的并发控制:锁MySQL的事务设置MySQL的索引设置MySQL的用户和权限管理 一、数据...

  • Django事务操作

    在Django中实现数据库的事务操作 在学习MySQL数据库时,MySQL数据库是支持原子操作的. 什么是数据库的...

  • Lock wait timeoutexceeded; try r

    今天mysql数据库执行 insert update操作均出现了 Lock wait timeoutexceede...

  • node-express不能操作mysql解决办法

    express连接操作数据库 use mysql;update user set authentication_s...

  • 面试官:说一下MySQL事务隔离级别?

    MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,MySQL 事务隔离级别总共有以下 4 种: READ...

  • Mysql并发控制-事务

    Mysql并发控制-事务 事务的特性ACID A: atomiciy 原子性一个事务必须保证其中的操作要么全部执行...

  • 数据库(五)

    1. MySQL 基础考点 事务原理,事务特性,事务并发控制常用字段、含义区别常用数据库引擎直接区别 2. 什么是...

网友评论

      本文标题:MySQL事务+FOR UPDATE解决并发操作数据库

      本文链接:https://www.haomeiwen.com/subject/ojdrpxtx.html