TableA

+----+------+
| c1 | c2   |
+----+------+
|  3 | NULL |
|  4 | NULL |
|  5 | NULL |
| 11 |   12 |
| 12 |   13 |
+----+------+
一 在c1上无索引,innodb_locks_unsafe_for_binlog开关被关闭。
1  1.0 select * from ta where c1=11在read_repatable  isolation level的时候,另一个session是可以随便插入的任何值。
   1.1 如果是select * from ta where c1=11 lock in share mode它是对所有的行加S lock,另外一个session任何值都是不能插入的。
2  update ta set c1=17 where c1=11在read_repatable  isolation level的时候,对表中所有行加X行锁,另外一个session不能插入任何值。

二 当c1上有索引的时候,非cluster的,非unique的,innodb_locks_unsafe_for_binlog开关被关闭。
1  1.0 select * from ta where c1=11在read_repatable  isolation level的时候,另一个session是可以随便插入的任何值。
   1.1 如果是select * from ta where c1=11 lock in share mode 会对c1=11这一行加S锁,在C1<12上所有的行加上S gap锁,
   即另外一个session插入c1>=12是可以的,但是插入c1<12的值不成功。
2  update ta set c1=17 where c1=11在在read_repatable  isolation level的时候,对表中c1=11这一行加上X锁,对c1<12这个区间插入X gap锁,
    另外一个session插入c1>=12是成功的,但是插入c1<12的都是不可以的。

三 innodb_locks_unsafe_for_binlog开关被打开,index为clustered和unique的。。等等 分别去实验,好多,不写了。。

一个问题:>select * from tb;
+------+------+
| c1   | c2   |
+------+------+
|    3 | NULL |
|    4 | NULL |
|    5 | NULL |
|    6 |   11 |
|   11 |   12 |
|   14 |   13 |
|   15 |   16 |
|    7 |   10 |
|    8 |   10 |
|    9 |   10 |
+------+------+>show create table tb;| tb    | CREATE TABLE `tb` (`c1` int(11) DEFAULT NULL,`c2` int(12) DEFAULT NULL,KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |>set autocommit=0;
>select * from tb where c1=11;经过验证的结果是:lock monitor显示的加锁:                                 11加S锁,11的下一条加了S gap锁,
实际的操作是:                             【11前的一条,11,11后的一条)不能被插入

转载于:https://www.cnblogs.com/jack204/archive/2012/08/20/2647962.html

对mysql的各种sql语句如何对表加锁的实验相关推荐

  1. MySQL数据库:SQL语句

    MySql数据库系列阅读 MySQL数据库 MySQL数据库:SQL语句 MySQL数据库:完整性约束 MySQL数据库备份与还原 MySQL数据库:编码 1. SQL概述 1.1 什么是SQL SQ ...

  2. 1.MySQL数据库 2.SQL语句

    01数据库概念 * A: 什么是数据库数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. * B: 什么是数据库 ...

  3. mysql 执行顺序 SQL语句执行顺序分析

    最近在做一个数据库的大作业,算是复习了下MySql里面比较复杂的一些语句的用法,如Left Join之类的.在这里就不对具体语法进行记录了,希望能在以后经常用到,而不是隔好长时间用一次.在这里就记录下 ...

  4. MySQL数据库的SQL语句

    MySQL数据库的SQL语句 MySQL的常用数据类型 MySQL数据类型及含义 char与varchar的区别 MySQL的基本命令 登录数据库 查看MySQL数据库版本 查看当前服务器中的数据库 ...

  5. mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

    在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...

  6. php 登陆 sql语句,PHP 连接MySQL数据库的SQL语句的简单示例

    这篇文章主要为大家详细介绍了PHP 连接MySQL数据库的SQL语句的简单示例,具有一定的参考价值,可以用来参考一下. 首先用phpmyadmin进入建立数据库user 再建个三段的表admin 再别 ...

  7. MySQL数据库高级SQL语句(三)

    MySQL数据库高级SQL语句 SELECT TRIM 连接查询 CREATE VIEW UNION 交集值 无交集值 CASE SELECT TRIM SELECT TRIM (位置 '想移除掉的字 ...

  8. mysql怎么写sql语句_Navicat如何写sql语句

    sql是操作数据库中数据的语句,在不同的数据库中会略有不同.Navicat for MySQL是一款很方便的MySQL客户端工具,能够很好的提供操作数据库可视界面,在同类型的软件中,占有极高的市场份额 ...

  9. MySQL 简介及SQL 语句

    MySQL 简介及SQL 语句 一.数据库概述 1.数据库的分类 1)区别 2.MySQL 概述 3.MySQL 存储原理 二.部署 MySQL 数据库 1.安装 MySQL 数据库 2.优化调整 M ...

最新文章

  1. java数组与对象例题,Java的字符串和数组是以对象的形式出现的。()
  2. java实现int类型数组元素拷贝
  3. DirectoryInfo类 c# 1614534016
  4. python word处理_Python 处理word期间遇到的问题
  5. 数据库SQL Server 基础知识思维导图
  6. tkinter教程_Tkinter教程–第2部分
  7. c语言编程悬臂梁受力分析,悬臂梁受力的分析.doc
  8. CMOS模拟集成电路设计学习笔记
  9. python图像文字识别 - PyTesser
  10. java long转float_Java中为什么long能自动转换成float类型
  11. P进阶_(zip函数)
  12. Java 两个日期间的天数计算
  13. OpenCV——简单的识别提取图像中的水平线与垂直线
  14. HashMap 为什么是2倍扩容
  15. vue引入腾讯地图,去除水印
  16. Python3 浮点数精度问题
  17. SEO白帽必备孙子兵法之三十六计
  18. yarn部署及Linux的OOM、clean机制
  19. 深入理解和把握数字经济的基本特征
  20. RedisTemplate与jedis

热门文章

  1. 深入java并发包源码(三)AQS独占方法源码分析
  2. YII2集成GOAOP,实现面向方面编程!
  3. 剑指offer第12题打印从1到n位数以及大整数加法乘法
  4. Scrum 项目4.0--软件工程
  5. 如何在Django1.6结合Python3.4版本中使用MySql
  6. jQuery遮罩层(转)
  7. bio阻塞的缺点_java 中的 BIO/NIO/AIO 详解
  8. JS-立即执行函数(function(){...})() amp;amp; (function(){...})()
  9. 微信小程序 蓝牙的使用
  10. python 清空文件夹_Python初学者请注意!别这样直接运行python命令,否则电脑等于“裸奔”...