gap锁 对于unique index 和Ununique index

来源:互联网 发布:网络推动经济发展 编辑:程序博客网 时间:2024/05/16 23:58
Session 1:mysql> select * from s100;+-----+------+------+| sn  | id   | info |+-----+------+------+| 227 |    1 | 1a   || 228 |    3 | 3a   || 229 |    6 | 6a   || 230 |    9 | 9a   || 231 |   12 | 12a  || 232 |   15 | 15a  || 233 |   18 | 18a  |+-----+------+------+7 rows in set (0.00 sec)mysql> show index from s100;+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| Table | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| s100  |          0 | PRIMARY   |            1 | sn          | A         |           7 |     NULL | NULL   |      | BTREE      |         |               || s100  |          1 | s100_idx1 |            1 | id          | A         |           7 |     NULL | NULL   | YES  | BTREE      |         |               |+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+2 rows in set (0.00 sec)mysql> show variables like '%tx_isolation%';+---------------+-----------------+| Variable_name | Value           |+---------------+-----------------+| tx_isolation  | REPEATABLE-READ |+---------------+-----------------+1 row in set (0.00 sec)mysql> update s100 set info='bbb' where id=12;Query OK, 1 row affected (0.00 sec)Rows matched: 1  Changed: 1  Warnings: 0Session 2:mysql> insert into s100(id,info) select 13,'xxxxxxx';ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transactionmysql> mysql> mysql> mysql> insert into s100(id,info) select 12,'xxxxxxx';ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transactionmysql> insert into s100(id,info) select 14,'xxxxxxx';ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transactionmysql> insert into s100(id,info) select 15,'xxxxxxx';Query OK, 1 row affected (0.00 sec)Records: 1  Duplicates: 0  Warnings: 0会从12 锁到14改成unique index 呢?Session 1:mysql> show index from s100;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| s100  |          0 | PRIMARY  |            1 | sn          | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+1 row in set (0.00 sec)mysql> create unique index s100_idx1 on s100(id);Query OK, 0 rows affected (0.05 sec)Records: 0  Duplicates: 0  Warnings: 0mysql>  update s100 set info='bbb' where id=12;Query OK, 0 rows affected (0.00 sec)Rows matched: 1  Changed: 0  Warnings: 0mysql> show index from s100;+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| Table | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| s100  |          0 | PRIMARY   |            1 | sn          | A         |           8 |     NULL | NULL   |      | BTREE      |         |               || s100  |          0 | s100_idx1 |            1 | id          | A         |           8 |     NULL | NULL   | YES  | BTREE      |         |               |+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+2 rows in set (0.00 sec)Session 2:Database changedmysql>  insert into s100(id,info) select 13,'xxxxxxx';Query OK, 1 row affected (0.00 sec)Records: 1  Duplicates: 0  Warnings: 0此时正常

0 0