怎么进行MySQL 5.5 MyISAM表锁测验
发布时间:2021-12-18 13:45:59 所属栏目:MySql教程 来源:互联网
导读:这篇文章给大家介绍怎么进行MySQL 5.5 MyISAM表锁测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 对于MyISAM表,加的锁是表级锁;写操作会阻塞读操作,读操作会阻塞写操作,写操作会阻塞写操作;读操作不会阻塞读操作。 mysql se
这篇文章给大家介绍怎么进行MySQL 5.5 MyISAM表锁测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 对于MyISAM表,加的锁是表级锁;写操作会阻塞读操作,读操作会阻塞写操作,写操作会阻塞写操作;读操作不会阻塞读操作。 mysql> select * from t2; +----+---------+ | id | name | +----+---------+ | 8 | Neo | | 9 | Trinity | +----+---------+ 2 rows in set (0.00 sec) mysql> desc t2; +-------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------------+------+-----+---------+----------------+ | id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(10) | NO | | NULL | | +-------+---------------------+------+-----+---------+----------------+ 2 rows in set (0.09 sec) 为表增加读锁 mysql> lock table t2 read; Query OK, 0 rows affected (0.00 sec) 会话② mysql> select * from t2; +----+---------+ | id | name | +----+---------+ | 8 | Neo | | 9 | Trinity | +----+---------+ 2 rows in set (0.00 sec) 会话会处于等待状态 mysql> update t2 set name='James' where id=5; 会话① mysql> show processlist; +----+-----------------+-----------+------+---------+--------+-----------------------------------------------------------------------------+---------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+-----------+------+---------+--------+-----------------------------------------------------------------------------+---------------------------------------+ | 1 | system user | | NULL | Connect | 748155 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | | 2 | system user | | NULL | Connect | 748156 | Connecting to master | NULL | | 13 | event_scheduler | localhost | NULL | Daemon | 600105 | Waiting on empty queue | NULL | | 74 | neo | localhost | fire | Query | 0 | NULL | show processlist | | 75 | neo | localhost | fire | Query | 83 | Waiting for table level lock | update t2 set name='James' where id=5 | +----+-----------------+-----------+------+---------+--------+-----------------------------------------------------------------------------+---------------------------------------+ 5 rows in set (0.00 sec) mysql> unlock tables; Query OK, 0 rows affected (0.00 sec) 会话② mysql> update t2 set name='James' where id=5; Query OK, 0 rows affected (1 min 48.96 sec) Rows matched: 0 Changed: 0 Warnings: 0 测试二,会话①的写操作阻塞会话②的读操作 会话① mysql> lock table t2 write; Query OK, 0 rows affected (0.00 sec) mysql> show processlist; +----+-----------------+-----------+------+---------+--------+-----------------------------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+-----------+------+---------+--------+-----------------------------------------------------------------------------+------------------+ | 1 | system user | | NULL | Connect | 748422 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | | 2 | system user | | NULL | Connect | 748423 | Connecting to master | NULL | | 13 | event_scheduler | localhost | NULL | Daemon | 600372 | Waiting on empty queue | NULL | | 74 | neo | localhost | fire | Query | 0 | NULL | show processlist | | 75 | neo | localhost | fire | Query | 2 | Waiting for table metadata lock | select * from t2 | +----+-----------------+-----------+------+---------+--------+-----------------------------------------------------------------------------+------------------+ 5 rows in set (0.00 sec) 会话② 查询会阻塞 mysql> select * from t2; 会话① mysql> unlock tables; Query OK, 0 rows affected (0.00 sec) 会话② mysql> select * from t2; +----+---------+ | id | name | +----+---------+ | 8 | Neo | | 9 | Trinity | | 10 | Jack | +----+---------+ 3 rows in set (47.89 sec) mysql> select * from t70; ERROR 1100 (HY000): Table 't70' was not locked with LOCK TABLES 使用表的别名会报错 mysql> lock table test read; Query OK, 0 rows affected (0.00 sec) mysql> select * from test t where id=80; ERROR 1100 (HY000): Table 't' was not locked with LOCK TABLES 需要对别名进行锁定 mysql> lock table test t read; Query OK, 0 rows affected (0.00 sec) mysql> select * from test t where id=80; +------+------+ | id | name | +------+------+ | 80 | Kame | +------+------+ 1 row in set (0.00 sec) 关于怎么进行MySQL 5.5 MyISAM表锁测试就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐