mysql 有索引没走索引 更新锁全表

时间:2020-12-18 23:46:01
Session 1:
mysql> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 2 |
+-----------------+
1 row in set (0.00 sec) mysql> start transaction;
Query OK, 0 rows affected (0.00 sec) mysql> select * from t200 where phoneNo between 30 and 40 for update;
+----+---------+-------------+--------+
| sn | phoneNo | channelType | status |
+----+---------+-------------+--------+
| 30 | 30 | 2 | 1 |
| 34 | 34 | 3 | 2 |
| 39 | 39 | 3 | 2 |
+----+---------+-------------+--------+
3 rows in set (0.00 sec) mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec) mysql> explain select * from t200 where phoneNo between 30 and 40 for update;
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | t200 | ALL | t200_idx1 | NULL | NULL | NULL | 34 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+ Session 2: mysql> insert into t200 values(29,29,4,1);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
mysql> insert into t200 values(100,100,4,1);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
mysql> insert into t200 values(1000,1000,4,1);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
mysql> insert into t200 values(1000,1000,4,1);