今天大家一起闲聊说道了InnoDB引擎,他们了很多我不知道的事请,不知怎么就料到了锁,这个我还知道一些,就说:在myisam引擎下用到索引的前提下就会加行锁,而且所得是索引表,不用索引的话就加表锁。本来以为很牛,但是同时问我怎么知道的,我说在意片博客上看到的。话刚刚说出口我就觉得一点说服力都没有。然后就说:我好像在mysql的帮助文档上面也看过(其实我没看见过)。老板说:帮助文档也不一定对,版本不一样可能会有修改,还是试一试比较好。
确实,我想了想我所学到的这些只是估计80%都是从网上的博客里看来的,就算是官方文档也可能有版本上的问题而有微小的改变。除了一些代码,像这种知识我确实没有时间过。先买那我就给大家实践一下。
首先需要打开两个mysql的窗口
然后创建一个表 表中有两个字段,其中一个设为索引,另一个不设:
然后加入数据:
下面我们开启事物然后更新大家就能明白了:
然后再在另一个窗口更新
但是呢已经死锁了,跟们没有结果知道我们在第一个窗口commit才可以
然后我们再试试更新其他的选项:
没有问题,所以是行锁,不是表锁。然后我们不用id做条件试试
可见再没有索引的前提下这是表锁,哈哈,虽然很简单,但是我想说的是:估计这是除了代码外的第一次用实践得出来的知识。