美文网首页PHP经验分享MySQL
mysql 的 事务 和 锁

mysql 的 事务 和 锁

作者: Renew全栈工程师 | 来源:发表于2020-12-19 02:24 被阅读0次

mysql事务select 只是进行了隔离,保证数据的一致性,并没有加锁,如果要加锁可以用for update。

这句话等于说,我现在开启一个事务,执行select哪怕有上个事务还未结束,也会返回结果

现在库存都是10,并发情况下,都进行了查询库存操作,都返回了10 ,然后每个客户端都进行了10-1操作,所以最终是10单,但是库存只减去了1次

我们如何解决这个问题呢

正常是应该,我开启了事务,如果没有commit或者rollback 的情况下,下一个客户端的select应该是一直等待上一个事务结束,我才能正常select 进行查询,所以这时候,要把select语句锁住,等待上个事务结束,但是这个锁不是真正的锁,只是对开启了事务的数据进行加锁等待

比如现在我要查询全表

select * from table for update

这个时候回立马返回结果,因为并没有开启事务

start transaction
select * from table for update
commit

这时候必须等待 start ... commit 这段代码执行结束后,下个 同样开始事务的 并且进行 select...for update 的才能执行

这时候,同时10个并发,那他们的select ... for update 将都是线性执行的,一个结束才进行下一个操作

而且 for update 是可以针对单个数据的

start transaction
select * from table where id=1 for update
commit
start transaction
select * from table where id=2 for update
commit

这时候哪怕 id=1 还未执行结束,id=2的都会照样执行

但是

start transaction
select * from table where id=1 for update
commit
start transaction
select * from table for update
commit

id=1 是单条数据,指定了索引条件,但是下面这个没有指定,等于是扫码全表,所以,他也会等待id=1结束才执行自己

相关文章

  • mysql的锁+事务,联合的地方

    mysql的锁+事务,联合的地方 全文是对《Mysql 技术内幕 Innodb》中,锁和事务两个章节,自己能看懂或...

  • 数据库事务,锁

    事务 事务特点ACID 理解ACID 以银行转账为例 MySQL锁 锁是MySQL在服务器层和存储引擎层的并发控制...

  • 高性能Mysql笔记

    一、Mysql架构与历史 1、架构图 2、锁 表锁 行级锁 3、事务 死锁 Mysql中的事务 1

  • MySQL事务和锁

    事务特性 原子性(Atomicity [ˌætəˈmɪsəti]):事务是不可分割的最小单元一致性(Consist...

  • Mysql事务和锁

    1.什么是数据库的事务? 数据库事务的典型场景? 订单,转账 支付,电商等全部成功/全部不成功。金融 什么是事务?...

  • Mysql事务和锁

    ACID 其实AC是一个概念,就是要么一起执行,要么都不执行,只是看问题的指标不同而已,一个侧重过程,一个侧重结果...

  • MySQL相关(一)——— 事务和锁

    事务的隔离级别和锁机制 【1】InnoDB 事务隔离级别和锁 【2】脏读、不可重复读、幻读 mysql 相关 常用...

  • MySQL数据库高级(七)——事务和锁

    MySQL数据库高级(七)——事务和锁 一、事务简介 1、事务简介 事务(Transaction) 是指作为单个逻...

  • mysql 的 事务 和 锁

    mysql事务select 只是进行了隔离,保证数据的一致性,并没有加锁,如果要加锁可以用for update。 ...

  • 淘宝MySQL文档整理

    MySQL · 引擎特性 · InnoDB 事务锁系统简介 MySQL · 引擎特性 · Innodb 锁子系统浅...

网友评论

    本文标题:mysql 的 事务 和 锁

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