mysql锁

作者: 流浪冰007 | 来源:发表于2018-01-21 13:31 被阅读0次

1,读写锁

        读锁是共享锁,所有读操作都可以获取,写锁是拍他锁,可以阻塞其他读和写操作

2,锁粒度

        表级别的锁和行级别的锁,表锁是开销最小的锁,会将整张表锁住,一个用户在对表进行写操作时,需要先获取写锁,这会阻塞其他用户对该表的所有读写操作,只有没有写锁时,其他读取的用户才能获取读锁,读锁之间互不干扰。

3,行及锁

        行及锁可以最大程度的支持并发处理,但同时也带来了巨大的锁开销,mysql innodb的行及锁只在存储引擎层实现,服务器层没有实现。

4,事务特性 ACID

        A:原子性 一个事务必须被视为一个不可分割的最小执行单元,整个事务要么成功要么失败回滚,不可能只执行事务的一部分。

        C:一致性 数据库总是从一个一致性状态转为另一个一致性状态。

        I:隔离性 一个事务所做的修改在提交前对于其他事务是不可见的。

        D:一旦事务提交,其所做的修改就会永久保存到数据库中

5,事务的隔离级别

        read uncommitted

                读未提交,事务的修改,即使没有提交也会被其他事物看见,事务可以读取未提交的数据,称为脏读

        read committed

                大多数数据库的默认隔离级别是读已提交,mysql除外,一个事务从开始执行到提交,所做的修改只有在提交之后才会对其他事务可见。也叫不可重复读

        repeatable read 

                可重读,同一个事务中多次读取同样记录的结果是一致的,但在理论上,可重复读无法解决幻读的为题,当事务在读取某个范围内的数据时,如果其他事务做了插入操作,同一事务前后两次读取的结果就会不一致,innodb通过mvvc,多版本并发控制解决了幻读的问题

        serializable

                强制控制事务串行执行,在事务读取所有记录上加锁,但为造成大量的锁争用和超时。

6,死锁

        死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而产生恶性循环的现象。

        mysql innodb处理的死锁的方法是:将持有最少行及拍他锁的事务进行回滚,死锁的产生有双重原因,有些是因为真正的数据冲突,通常难以避免,有些是因为存储引擎的实现方式导致的。

相关文章

  • 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/tgdfaxtx.html