对mysql的各种sql语句如何对表加锁的实验
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语句如何对表加锁的实验相关推荐
- MySQL数据库:SQL语句
MySql数据库系列阅读 MySQL数据库 MySQL数据库:SQL语句 MySQL数据库:完整性约束 MySQL数据库备份与还原 MySQL数据库:编码 1. SQL概述 1.1 什么是SQL SQ ...
- 1.MySQL数据库 2.SQL语句
01数据库概念 * A: 什么是数据库数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. * B: 什么是数据库 ...
- mysql 执行顺序 SQL语句执行顺序分析
最近在做一个数据库的大作业,算是复习了下MySql里面比较复杂的一些语句的用法,如Left Join之类的.在这里就不对具体语法进行记录了,希望能在以后经常用到,而不是隔好长时间用一次.在这里就记录下 ...
- MySQL数据库的SQL语句
MySQL数据库的SQL语句 MySQL的常用数据类型 MySQL数据类型及含义 char与varchar的区别 MySQL的基本命令 登录数据库 查看MySQL数据库版本 查看当前服务器中的数据库 ...
- mysql中利用sql语句修改字段名称,字段长度等操作(亲测)
在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...
- php 登陆 sql语句,PHP 连接MySQL数据库的SQL语句的简单示例
这篇文章主要为大家详细介绍了PHP 连接MySQL数据库的SQL语句的简单示例,具有一定的参考价值,可以用来参考一下. 首先用phpmyadmin进入建立数据库user 再建个三段的表admin 再别 ...
- MySQL数据库高级SQL语句(三)
MySQL数据库高级SQL语句 SELECT TRIM 连接查询 CREATE VIEW UNION 交集值 无交集值 CASE SELECT TRIM SELECT TRIM (位置 '想移除掉的字 ...
- mysql怎么写sql语句_Navicat如何写sql语句
sql是操作数据库中数据的语句,在不同的数据库中会略有不同.Navicat for MySQL是一款很方便的MySQL客户端工具,能够很好的提供操作数据库可视界面,在同类型的软件中,占有极高的市场份额 ...
- MySQL 简介及SQL 语句
MySQL 简介及SQL 语句 一.数据库概述 1.数据库的分类 1)区别 2.MySQL 概述 3.MySQL 存储原理 二.部署 MySQL 数据库 1.安装 MySQL 数据库 2.优化调整 M ...
最新文章
- java数组与对象例题,Java的字符串和数组是以对象的形式出现的。()
- java实现int类型数组元素拷贝
- DirectoryInfo类 c# 1614534016
- python word处理_Python 处理word期间遇到的问题
- 数据库SQL Server 基础知识思维导图
- tkinter教程_Tkinter教程–第2部分
- c语言编程悬臂梁受力分析,悬臂梁受力的分析.doc
- CMOS模拟集成电路设计学习笔记
- python图像文字识别 - PyTesser
- java long转float_Java中为什么long能自动转换成float类型
- P进阶_(zip函数)
- Java 两个日期间的天数计算
- OpenCV——简单的识别提取图像中的水平线与垂直线
- HashMap 为什么是2倍扩容
- vue引入腾讯地图,去除水印
- Python3 浮点数精度问题
- SEO白帽必备孙子兵法之三十六计
- yarn部署及Linux的OOM、clean机制
- 深入理解和把握数字经济的基本特征
- RedisTemplate与jedis
热门文章
- 深入java并发包源码(三)AQS独占方法源码分析
- YII2集成GOAOP,实现面向方面编程!
- 剑指offer第12题打印从1到n位数以及大整数加法乘法
- Scrum 项目4.0--软件工程
- 如何在Django1.6结合Python3.4版本中使用MySql
- jQuery遮罩层(转)
- bio阻塞的缺点_java 中的 BIO/NIO/AIO 详解
- JS-立即执行函数(function(){...})() amp;amp; (function(){...})()
- 微信小程序 蓝牙的使用
- python 清空文件夹_Python初学者请注意!别这样直接运行python命令,否则电脑等于“裸奔”...