声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 mysql锁机制分为表级锁和行级锁 myISAM 引擎不支持事物! 排他锁:Set Autocommit=0; // 把事物设置成手动事物! 排他锁又称为写锁,简称X锁 排他锁就是不能与其他锁并存,如A事务获取了一行数据的排他锁,事务就不能再获取该行的其他锁 必须等A事物的排他锁结束才能对一行数据进行增删改! mysql InnoDB引擎默认的修改数据语句,update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,如果加排他锁可以使用select ...for update语句 实验1:下图两个用户都设置了手动事物 实验证明 A 把数据删了 B还能查到 B也要进行commit 提交或者roll回滚才能看到修改后的数据! ![image](http://os78f4hny.bkt.clouddn.com/201708310001.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
实验2:A事物还在执行 B事就对这行数据进行操作 B事物卡住在这里! ![image](http://os78f4hny.bkt.clouddn.com/201708310002.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
实验3:A把sid=1的数据改成了2 然后b要把sid的数据改成5 结果失败了 原因是已经没有sid=1 这条数据了 早就被A修改成2了 如果B的条件是 把sid=2的数据修改成5 那就能操作成功了! ![image](http://os78f4hny.bkt.clouddn.com/201708310003.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
实验4:A把查询出来的数据加上排他锁 B也对这条数据去加排他锁 然后卡住了 要等A执行commit提交 A的排他锁才能结束! ![image](http://os78f4hny.bkt.clouddn.com/201708310004.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
下图用工具测试:排他锁 A用户已经把这个表用排他锁锁住了 B用户去修改数据 然后卡在这里 要等A用户执行Commit 提交 B用户才能执行 ![image](http://os78f4hny.bkt.clouddn.com/201708310005.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
再看看下图 结果是10 因为A用户把sid改成10 B用户的条件是sid=1 没有此条数据 所以修改不上! ![image](http://os78f4hny.bkt.clouddn.com/201708310006.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
共享锁:Lock in share mode 第一 共享锁不能与排他锁共存在! 第二 共享锁在自动事物的情况下不会发生冲突 第三 共享锁在手动事物的情况下会出现一系列问题! 第四 共享锁可以多个用户对同一条记录锁定! 实验1:在手动事物的情况下 A先对这一行数据进行了排他锁 然后B用户又去对这行数据进行共享锁 死活不给B用户操作 要等A用户把这个事物处理完才能给B用户进行排他锁! 反之结果还是一样 排他锁和共享锁不能共存! ![image](http://os78f4hny.bkt.clouddn.com/201708310007.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
![image](http://os78f4hny.bkt.clouddn.com/201708310008.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
实验2:在手动事物下 A和B 都对这一条数据加上共享锁了 然后A事务要修改 会处于等待状态 他在等B用户来操作 只要B一来操作 系统就会把B用户掐死掉 先来的成功执行 后来的直接被干掉 ![image](http://os78f4hny.bkt.clouddn.com/201708310009.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
实验3:A用户对sid=1记录共享锁锁定 B用户对Sid=2记录共享锁锁定 然后A用户去修改sid=2的记录 卡住在那里 等B来操作 B一来操作 B就完蛋了! 这个故事告诉我们 被干掉总是B用户! ![image](http://os78f4hny.bkt.clouddn.com/201708310010.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
Sqlyog实验双方各锁了一条数据 ![image](http://os78f4hny.bkt.clouddn.com/201708310011.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
A对B锁定的数据进行更改 A处于等待 B对A的数据进行改变 B用户的锁干掉了 ![image](http://os78f4hny.bkt.clouddn.com/201708310012.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
最后两个人都把事物提交或者回滚 就能查询出真实数据了! ![image](http://os78f4hny.bkt.clouddn.com/201708310013.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
后执行的遭殃 直接被干掉了! ![image](http://os78f4hny.bkt.clouddn.com/201708310014.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
|