mysql里面的伪事务-----MyISAM存储引擎的锁机制
在Mysql数据库里面存在了好几个存储引擎,其中有的存储引擎是支持事务管理,例如InnoDB,但是有的存储引擎是不支持事务管理,例如MyISAM存储引擎。如果用户在创建表的时候选择的存储引擎是MyISAM,用户可以选择应用表锁来代替事务,这种使用表锁来代替事务的事件被称为伪事务。表锁分为读锁(read)和写锁(write)。
首先先给一张表添加一个读锁lock table 表名 read,截图如下:
此时user表的read锁已经加好了,现在我们往user表里面插入一条记录如下,会报错,截图如下:
但是如果我把read锁释放掉就可以了,截图如下:
于是我们可以得出结论,给表添加read锁,就不能对表进行添加,删除,修改等操作,但是可以对表进行查询。
其次给一张表添加一个写锁lock table 表名 write,截图如下:
此时在该用户下查询是本可以的,但是你重新打开一个窗口就不行了,一直在等待状态,截图如下:
一旦在第一个窗口里面把这个write锁释放掉以后,第二个窗口的查询结果立马就出来了,截图如下: