mysql 锁 实验
2016-06-24 18:02
471 查看
CREATE TABLE `kk` ( `a` int(11) NOT NULL, `b` int(11) NOT NULL, `c` int(11) NOT NULL, PRIMARY KEY (`a`), UNIQUE KEY `bb` (`b`), KEY `cc` (`c`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
mysql> select * from kk; +---+----+----+ | a | b | c | +---+----+----+ | 1 | 10 | 20 | | 3 | 13 | 23 | | 5 | 15 | 25 | | 7 | 17 | 27 | | 9 | 19 | 29 | +---+----+----+ 5 rows in set (0.16 sec)
铺助索引 主健
a=5 recordlock[5]
a<5 next_keylock[1,3,5]
a<=5 next_keylock[1,3,5,7]
a>5 next_keylock[7,9,sup]
a>=5 next_keylock[5,7,9,sup]
b=15 recordlock[5] recordlock[5]
b<15 next_keylock[10,13,15] recordlock[1,5]
b<=15 next_keylock[10,13,15,17] recordlock[1,3,5]
b>15 next_keylock[17,19,sup] recordlock[17,19]
c=25 next_keylock[25] ,caplock[27] recordlock[25]
c<25 next_keylock[20,23,25] recordlock[20,23]
c<=25 next_keylock[20,23,25,27] recordlock[20,23,25]
c>25 next_keylock[27,29,sup] recordlock[27,29]
rr级别: 解决不可重复读,幻读
set tx_isolation="REPEATABLE-READ"
select * from kk where a ... for update
select * from kk where b ... for update
select * from kk where c ... for update
RR:对打开的游标都需要加锁,直到不满足条件那条记录
RC:只对满足条件的记录加锁
RR:
NEXT-KEY-LOCK-------唯一等值查询---- 转换为RECORD LOCK
select * from kk force index(primary) where a.. for update; 防数据量小,走全表,不走索引,会全表锁
单个事务插入一条记录,不对该条记录的下一条记录加插入意向锁
如果要插入记录的位置的下一条记录有CAP LOCK | NEX-KEY LOCK,就会在该记录加上插入意向锁,等待插入,如果下一条记录是RECORD LOCK,就直接插入
相关文章推荐
- hive-1.21用mysql做元数据库安装详解及遇到的问题解答
- MySQL数据库引擎详解
- 查询当天数据(mysql)
- mysq-数据表新增字段、重名字段、删除字段
- mysql 用户变量不能赋予null值
- Mysql JDBC Url参数说明
- mysqldump(数据库导出)参数详细说明
- MySQL字符串函数 字符串大小写转换
- mysql-\g和\G的作用
- JDBC——用JDBC连接MySQL数据库并进行简单的增删改查操作
- mysql case then使用
- mac 下mysql root密码问题
- mysql-数据库的更新和删除
- mysql-模糊查找数据库和查看数据库的创建语句
- Ubuntu 安装新版 MySQL
- MYSQL数据库字符编码设置
- mysql
- innodb重做日志缓冲
- mysql安装
- ubunta 中mysql基本操作