Home > Database > Mysql Tutorial > mysql表锁演示的语句

mysql表锁演示的语句

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-07 15:09:33
Original
1176 people have browsed it

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 首先看表结构,引擎innodb +----+----------+------+ | id | name | seat | +----+----------+------+ | 1 | 管理员 | 98 | | 2 | 维护人员 | 98 | | 3 | 主任 | 97 | | 4 | 班主任 | 96 | +----+---

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  首先看表结构,引擎innodb

  +----+----------+------+

  | id | name     | seat |

  +----+----------+------+

  |  1 | 管理员        |   98 |

  |  2 | 维护人员       |   98 |

  |  3 | 主任         |   97 |

  |  4 | 班主任         |   96 |

  +----+----------+------+

  id是主键,没有其他索引。

  先看表锁的情况

  发sql:

  set autocommit=0;

  select * from role where seat=98 for update;

  这里注意,set autocommit=0是必不可少的,因为如果数据很快就提交的话,锁就会自动释放。

  再发一条sql查询:select * from role where id = 1;

  显示结果:

  +----+--------+------+

  | id | name   | seat |

  +----+--------+------+

  |  1 | 管理员      |   98 |

  +----+--------+------+

  1 row in set (0.00 sec)

  这是因为select 操作 无关乎锁定。

  然后看写操作:update role set seat=99 where id =3;

  可以看到,漫长的等待后(超过mysql默认的执行时间之后),显示如下结果

  ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

  此时我们看锁定记录:

  发sql:SHOW PROCESSLIST;

  +----+------+-----------------+---------+---------+------+-------+--------------

  ----+

  | Id | User | Host            | db      | Command | Time | State | Info

  |

  +----+------+-----------------+---------+---------+------+-------+--------------

  ----+

  |  7 | root | localhost:50903 | mybatis | Sleep   | 1403 | NULL  | NULL

  |

  | 16 | root | localhost:51326 | mybatis | Query   |    0 | NULL  | SHOW PROCESSL

  IST |

  +----+------+-----------------+---------+---------+------+-------+--------------

  ----+

  第6列Time 1403 表示锁定时间,单位秒。

  结论:当where条件后面的列不是索引的时候,加上for update 会锁定全表,以至于后面任何记录都不能执行读写操作。比如本条id=3时,seat=97. 并不是查询时候的条件98.仍然是给锁住了,update不了。

  把锁kill掉,写操作就可以继续了:

  发sql: kill 7;

  这里就不演示效果了。

mysql表锁演示的语句

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Issues
MySQL stops process
From 1970-01-01 08:00:00
0
0
0
Error when installing mysql on linux
From 1970-01-01 08:00:00
0
0
0
phpstudy cannot start mysql?
From 1970-01-01 08:00:00
0
0
0
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template