目录

一、Innodb的行锁和表锁

1.1.什么是Innodb?什么是行锁和表锁?

1.2.行锁和表锁的特点

1.3.分类

1.4.注意事项

1.5.深入理解锁

一、Innodb的行锁和表锁

1.1.什么是Innodb?什么是行锁和表锁?

  1. Innodb:是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,其实也就是一套放在 MySQL后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引.
  2. InnoDB 给 MySQL 提供了具有事务(transaction)、回滚(rollback)和崩溃修复能力(crash recovery capabilities),并且支持MVCC.
  3. 行锁:对一个表锁住某几行,其他事务对锁住的行不能进行写操作.
  4. 表锁:锁住整个表,其他事务对整个表不能进行写操作.
  5. 注意:这两个锁都是针对于事务来说的,没有开启事务或者是在一个事务里面也就不存在锁了

1.2.行锁和表锁的特点

  1. 行锁可以支持更好的并发,但可能发生死锁
  2. 表锁不会发生死锁,对并发支持低

死锁处理机制

死锁产生了!因为 客户A 需要锁X来删除行,而 客户B 拿着锁X并正在等待 客户A 释放锁S看看客户A,B的状态:

客户A: 拿着锁S,等待着客户B释放锁X。
客户B: 拿着锁X,等待着客户A释放锁S。

发生死锁后,InnoDB会为对一个客户产生错误信息并释放锁。

返回给客户的信息:

ERROR 1213 (40001): Deadlock found when trying to get lock;
try restarting transaction

所以,另一个客户可以正常执行任务。死锁结束。

1.3.分类

行锁:

(1).共享锁: 在执行语句后加上lock in share mode,又叫读锁

当一个事务对某几行上读锁操作时,可以允许其他事务读,不允许写,但允许其他事务上读锁,

(2).排他锁: 在执行语句后加上for update,又叫写锁.

当一个事务对某几个上写锁时,不允许其他事务写,但允许读。更不允许其他事务给这几行上任何锁

表锁

1.4.注意事项

1.如果对某几行上行锁,但是没有索引,会变成表锁.行锁是针对索引来实现的

其实这里不太恰当的,并不是对变成表锁,而是对整个所有的数据行加行锁,因为在不使用索引的情况下,mysql并不知道哪些符合条件。会全部加锁返回。
      举例: 在一个事务中执行.
      SELECT * FROM account WHERE NAME IN(‘张三’,‘嗨’) LOCK IN SHARE MODE
      这个时候就会对整个表加锁.
      然后在另一个窗口执行. 将张三的名字改成张五
      UPDATE account SET NAME=“张五” WHERE id=2.
      就会发现不能更改,被锁住.但是如果对name加了索引就不会被锁住了.就会由表锁变为行锁.

2.两个事务不能锁同一个索引.

1.5.深入理解锁

  • 数据库的事务及其事务的隔离级别,但是数据库是怎样隔离事务的呢?这时候就牵连到了数据库锁。当插入数据时,就锁定表,这叫做”锁表”(其他不能做删除或新增操作,可以做更新);当更新数据时,就锁定行,这叫做”锁行”。
  • 锁在数据网络传输中是一个非常重要的概念,当多个用户对数据库进行操作时,会带来数据不一致的情况,所以,锁主要是在多用户情况下保证数据库数据完整性和一致性。

数据库得自动加锁,针对于InnoDB引擎.

当对表执行update,insert,delete操作时,会对涉及到得行默认加行级锁.其他事务可以读,但是不可以写

数据库引擎 Innodb相关推荐

  1. 数据库引擎InnoDB与MyISAM区别

    MySQL的数据表的类型 : MyISAM与InnoDB的区别: MyISAM是MySQL的默认数据库引擎(5.5版之前).虽然性能极佳,而且提供了大量的特性,包括全文索引.压缩.空间函数等,但MyI ...

  2. mysql数据库引擎InnoDB和MyISAM的区别

    InnoDB支持行级锁和表级锁(默认行级锁),支持事务,外部键等:大量的insert和update更快等.只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁. MyI ...

  3. MySQL引擎innodb和mysum_mysql数据库引擎InnoDB和MyISAM

    当concurrent_insert = 0 时,不允许并发插入 当concurrent_insert = 1时,如果myisam表中没有空洞(即表的中间没有被删除的行),myisam允许在一个进程读 ...

  4. mysql数据库引擎InnoDB和MyISAM

    一.Mysql锁分类 表级锁:开销小,加锁块:不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发性也最高. 页面 ...

  5. 数据库_mysql数据库引擎_数据库索引

    文章目录 前言 一.MySql数据库引擎 1.1.数据库引擎任务 1.2.常用的数据库引擎 1.2.1.InnoDB存储引擎 页主要部分 InnoDB的几个变量 1.2.2.MyISAM存储引擎 1. ...

  6. mysql的innodb数据库引擎详解

    http://www.jb51.net/softjc/158474.html 这篇文章主要介绍了mysql的innodb数据库引擎,需要的朋友可以参考下 一.mysql体系结构和存储引擎 1.1.数据 ...

  7. 数据库的两种引擎Innodb和MyIASM

    Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,关于数据库事务与其隔离级别的内容请见数据库事务与其隔 离级别这篇文章.该引擎还提供了行级锁和外键 ...

  8. mysql 修改引擎_修改MySQL的数据库引擎为INNODB的方法

    本文主要介绍了修改MySQL的数据库引擎为INNODB的方法,希望能对您有所帮助. 对于MySQL数据库,如果你要使用事务以及行级锁就必须使用INNODB引擎.如果你要使用全文索引,那必须使用myis ...

  9. binlog数据库不写入binlog_MySQL数据库及InnoDB存储引擎的日志文件

    船头上迎面而来的海风特别有劲道但却总有种苦咸的味道,他睁着通红的眼睛,紧绷着嘴.尽管眼前一望无垠的海面平静如清晨的托雷维耶哈盐湖湖面,但他的心仍然翻涌着昨晚暴风雨中的激浪.这是离开陆地,在海上航行这么 ...

最新文章

  1. Kinect 骨骼追踪数据的处理方法
  2. 在制造业中推进机器人技术的五种方法
  3. K-Complete Word CodeForces - 1332C(贪心)
  4. 从C#到Objective-C,循序渐进学习苹果开发(1)--准备开发账号和开发环境
  5. 10本最火的中台与数字化转型图书,朋友圈都在传
  6. 趣文:如何成为Google软件工程师?(二)
  7. 如何查看Oracle数据库字符集 尚未研究
  8. 计算机网络(HCIP、HCIE)系列文章大合集
  9. Linux中脚本的使用方法
  10. gcc动态链接库基本知识 [转]
  11. 蓝桥杯题目 计算后续日期
  12. PMP考试多少分算通过?
  13. Linux自学之旅-基础命令(一)
  14. 微博 用户画像_常见信息流平台用户画像分析
  15. Android: Android Studio 的模拟器一些使用问题
  16. bmp格式如何转换成jpg
  17. 教你文本聚类(参考http://www.kuqin.com/searchengine/20080511/8323.html)
  18. java计算机毕业设计个人交友网站源程序+mysql+系统+lw文档+远程调试
  19. Win 10 宽带拨号,连接失败,提示错误1058
  20. 声音/声学成像2021-4-13

热门文章

  1. chgrp -r mysql_简说LINUX 下chmod|chown|chgrp和用法和区别
  2. 注意的种类有?区别是?心理学中的“随意”是什么意思?|小白心理-312/347考研答疑
  3. 服务器接收不到信号,Windows上的子进程未接收到信号(SIGTERM)
  4. [附源码]java+ssm计算机毕业设计业俊宾馆客房管理系统【源码+数据库+LW+部署】
  5. 使用OBS推RTMP流
  6. mRemote字体大小设置
  7. PoS淘金热潮,全节点对于分布式网络到底意味着什么?
  8. Adobe Premiere Pro2018安装成功,但是打不开解决办法
  9. Java 读取 modbus slave模拟器数据 示例
  10. 【调剂】西安微电子技术研究所2023年硕士研究生入学考试复试分数线及复试安排...