MySQL 锁

作者: HikariCP | 来源:发表于2018-03-24 08:09 被阅读34次

数据库层面锁

表锁

锁定一张表的全部记录

SELECT username FROM user FOR UPDATE;

行锁

锁定一行记录

SELECT username FROM user WHERE id = 1 FOR UPDATE;

所以说在InnoDB引擎中,虽然默认为ROW LOCK但是也是在指定检索条件为主键的情况下,否则默认TABLE LOCK

页锁

行锁锁定一行记录,表锁锁定一张表中全部记录,页锁即折中。锁定相邻的一组记录。

共享锁

共享锁也称为读锁,即给数据添加读锁后,其他线程只能读取不能修改。如果有修改操作会被阻塞,进入队列

需要注意的是:
SELECT username FROM user WHERE id = 1 FOR UPDATE; 当抢锁的时候即便是普通的查询也会进入阻塞队列中。

这样就可并发正常查询:SELECT username FROM user WHERE id = 1;

排他锁

排他锁也称为写锁,和共享锁的区别在于,其他线程既不能读也不能修改。

业务处理层面思想

乐观锁

其实并不会加锁,只是也算是一种处理方式。顾名思义,这种情况认为不会发生并发冲突。抢占资源的情况,在数据库中通过添加version时间戳的方式来控制数据的版本。1.首先查询数据拿到verison 2.更新数据 3.查询数据对比version是否有变(并发冲突) 4.没有那么更新成功(COMMIT),如果有那么知道有其他线程进行了DML操作。回滚(ROLL BACK)

悲观锁

假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。悲观锁的具体实现即数据库层面的共享锁和排它锁。也只有数据库层面的锁能做到真正对数据的并发控制,多个系统之间并不能做到良好控制。

相关文章

  • Mysql的锁

    MySql锁的分类 Mysql里的锁大致可以分为全局锁、表级锁和行锁三类。 全局锁 Mysql 增加全局锁的方法:...

  • MySQL二进制日志

    MySQL-day10 MySQL存储引擎-锁 1)什么是“锁”? 2)“锁”的作用是什么? 3)MySQL中的锁...

  • MySQL的锁机制

    mysql的锁机制 1、MySQL锁的基本介绍 MyISAM:MySQL的表级锁有两种模式:表共享读锁(Table...

  • MS汇总

    数据库相关[MS-关于锁(乐观锁,悲观锁,行锁、表锁,共享锁,排他锁)Mysql索引优化Mysql查询优化Mysq...

  • Mysql 之 锁表与解表

    Mysql 之 锁表与解表 Mysql 查看锁表语句 mysql>show open tables where i...

  • rails中乐观锁和悲观锁的使用

    MySQL乐观锁和悲观锁的介绍可以参考之前的一篇文章MySQL中的锁(行锁,表锁,乐观锁,悲观锁,共享锁,排他锁)...

  • 秒杀随笔

    方法: mysql悲观锁 mysql乐观锁 PHP+redis分布式锁 PHP+redis乐观锁(redis wa...

  • 共享 + 排他锁

    mysql锁机制分为表级锁和行级锁 ,mysql中行级锁中的共享锁与排他锁进行分享交流。 测试语法 begin; ...

  • (4)头条mysql

    1、MySQL有哪些锁,乐观锁和悲观锁实现 如果避免、减少锁等待、团队中如何监控MySQL的锁等待的情况 锁监控:...

  • MySQL锁篇

    1 MySQL锁介绍 2 MySQL表级锁 2.1 表级锁介绍 ​ 表级锁由SQL layer实现。M...

网友评论

    本文标题:MySQL 锁

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