mysql 默认是表级锁一些不太常用命令

1,mysql默认的是表级锁。如果是启用InnoDB存储引擎那么该数据库支持行级锁。

2,查看数据库是否支持innodb的命令

SHOW variables like "have_%";

另一条命令SHOW  ENGINES;更为准确。

查看mysql数据库的详细信息 可以用  show status;

一下文章来自:http://blog.csdn.net/tigernorth/article/details/7948539

INNODB的行级锁有共享锁(S LOCK)和排他锁(X LOCK)两种。共享锁允许事物读一行记录,不允许任何线程对该行记录进行修改。排他锁允许当前事物删除或更新一行记录,其他线程不能操作该记录。

INNODB的行级锁有共享锁(S LOCK)和排他锁(X LOCK)两种。共享锁允许事物读一行记录,不允许任何线程对该行记录进行修改。排他锁允许当前事物删除或更新一行记录,其他线程不能操作该记录。

共享锁: 用法:SELECT ... LOCK IN SHARE MODE;

MySQL会对查询结果集中每行都添加共享锁。

锁申请前提:当前没有线程对该结果集中的任何行使用排他锁,否则申请会阻塞。

操作限制:

使用共享锁线程与不使用共享锁线程对锁定记录操作限制表

线程

读取操作

写入操作

共享锁申请

排他锁申请

使用共享锁

可读

可写/不可写(报错)

可申请

可申请

不使用共享锁

可读

不可写(阻塞)

可申请

不可申请(阻塞)

1. 使用共享锁线程可对其锁定记录进行读取,其他线程同样也可对锁定记录进行读取操作,并且这两个线程读取的数据都属于同一个版本。

2. 对于写入操作,使用共享锁的线程需要分情况讨论,当只有当前线程对指定记录使用共享锁时,线程是可对该记录进行写入操作(包括更新与删除),这是由于在写入操作前,线程向该记录申请了排他锁,然后才进行写入操作;当其他线程也对该记录使用共享锁时,则不可进行写入操作,系统会有报错提示。不对锁定记录使用共享锁的线程,当然是不可进行写入操作了,写入操作会阻塞。

3. 使用共享锁进程可再次对锁定记录申请共享锁,系统并不报错,但是操作本身并没有太大意义。其他线程同样也可以对锁定记录申请共享锁。

4. 使用共享锁进程可对其锁定记录申请排他锁;而其他进程是不可以对锁定记录申请排他锁,申请会阻塞。

排他锁:

用法: SELECT ... FOR UPDATE;

MySQL会对查询结果集中每行都添加排他锁,在事物操作中,任何对记录的更新与删除操作会自动加上排他锁。

锁申请前提:当前没有线程对该结果集中的任何行使用排他锁或共享锁,否则申请会阻塞。

操作限制:

使用排他锁线程与不使用排他锁线程对锁定记录操作限制表

线程

读取操作

写入操作

共享锁申请

排他锁申请

使用排他锁

可读(新版本)

可写

可申请

可申请

不使用排他锁

可读(旧版本)

不可写(阻塞)

不可申请(阻塞)

不可申请(阻塞)

1. 使用排他锁线程可以对其锁定记录进行读取,读取的内容为当前事物的最新版本;而对于不使用排他锁的线程,同样是可以进行读取操作,这种特性是一致性非锁定读。即对于同一条记录,数据库记录多个版本,在事物内的更新操作会反映到新版本中,而旧版本会提供给其他线程进行读取操作。

2. 使用排他锁线程可对其锁定记录进行写入操作;对于不使用排他锁的线程,对锁定记录的写操作是不允许的,请求会阻塞。

3. 使用排他锁进程可对其锁定记录申请共享锁,但是申请共享锁之后,线程并不会释放原先的排他锁,因此该记录对外表现出排他锁的性质;其他线程是不可对已锁定记录申请共享锁,请求会阻塞。

4. 使用排他锁进程可对其锁定记录申请排他锁(实际上并没有任何意义);而其他进程是不可对锁定记录申请排他锁,申请会阻塞。

微信 赏一包辣条吧~

支付宝 赏一听可乐吧~

mysql可能锁的表命令_mysql 默许是表级锁一些不太常用命令相关推荐

  1. mysql数据库的行级锁有几种_MySQL中的行级锁、表级锁、页级锁

    在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎).表级锁(MYISAM ...

  2. mysql innodb表损坏_MySQL数据库INNODB表损坏修复处理过程分享

    ##状况描述 突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了.innodb表损坏不能通过repair table 等修复myisam的命令操作.现在记录下解决 ...

  3. mysql行级锁作用_Mysql事务及行级锁的理解

    在最近的开发中,碰到一个需求签到,每个用户每天只能签到一次,那么怎么去判断某个用户当天是否签到呢?因为当属表设计的时候,每个用户签到一次,即向表中插入一条记录,根据记录的数量和时间来判断用户当天是否签 ...

  4. mysql创建表参数_MySQL创建数据表(CREATE TABLE语句)

    在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...

  5. mysql怎么加载bak文件_MySQL数据库(表)的导入导出(备份和还原)

    一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...

  6. mysql 数据库分表查询_mysql数据库分表及实现

    项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. 当出现这种情况时,我们可以考虑分表,即将单 ...

  7. MySQL授权修改表结构_MySQL创建修改表结构

    一.数据库的概述 1.什么是数据库 DB,DataBase 数据库:依照某种数据模型进行组织并存放到存储器的数据集合 DBMS,DataBase Management System 数据库管理系统:用 ...

  8. mysql 连接查询两个条件_MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习...

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节 ...

  9. mysql连接多个存储存储_Mysql(三):多表查询和存储程序

    今天内容: ● 多表查询(内连接 外连接 子查询) ● 存储程序(存储过程 函数) 多表查询 ​同时从多张数据表中查取到需要的数据即是多表查询. 多表查询时,参与查询的表中每条数据进行组合,这种效果称 ...

最新文章

  1. Java code lib aes 加解密
  2. SLAM的前世今生 终于有人说清楚了
  3. python学习笔记(四)——流程控制
  4. python中3个单引号_Python中单引号,双引号,3个单引号及3个双引号的区别
  5. Android 控件之RatingBar评分条
  6. spring 注释_Spring @Value注释
  7. python3中format函数列表_Python3之字符串格式化format函数详解(上)
  8. Linux笔记-手动配置yum及光盘安装rz
  9. 0927_C/C++笔试题_10:16道c语言面试例子【2】
  10. ios游戏使得newpad不断迅速增长
  11. 计算机外文文献PDF,computer network 计算机 网络 外文文献.pdf
  12. Shiro系列(一)——Shiro + Springboot + JWT 整合
  13. 实现用户登录注册代码(高级代码)
  14. 区块链行业感受及近期的一些规划
  15. docker仓库——搭建registry私有仓库
  16. vulnhub——Empire:LupinOne
  17. python--破解滑动验证码
  18. Android 获取视频宽高
  19. android 解锁图案代码,Android图案解锁code.docx
  20. 如何下载百度地图离线包并导入OruxMaps查看

热门文章

  1. 站点CSS样式不起作用,或仅仅有一部分起作用?随手记
  2. linux下生成key
  3. 关于通过Sql注入直接拖数据的讨论
  4. chisel快速入门(三)
  5. 学习笔记(05):Python网络编程并发编程-基于socket实现简单套接字通信
  6. java实现选择排序 带打印,选择排序算法的JAVA实现
  7. python获取当前时间的源代码_Python获取时间戳代码实例
  8. 计算整数中各位数字之和
  9. jQuery:表格的奇偶行变色,jquery实例之表格隔一行
  10. c++—简单的密码本实现