日期:2014-05-16  浏览次数:20835 次

mysql的锁,不同表之间怎么会相互影响?
经常出现这样的情况:(用show processlist查看)
0.正在执行:create index for temp_table(需要很长时间)
1.正在执行:select from table1(需要很长时间)
2.locked: update table1 
3.4.5.6.7.8.9....locked: select from table*

连接2被lock是可以理解的。但后面的连接被locked就很难理解了。似乎只要有update操作被锁定,其他的所有操作都被锁定,无论涉及的表是否相同,结果就象是单线程运行一样,在一个时间点,总是只有1个连接是活动的。

特别地,有连接0的时候,很容易就出现这种情况。也就是说,如果有一个连接更新表需要很长时间,就很容易导致整个数据库单线程运行。

有别的人遇到这种情况吗?请问有解决办法吗?

------解决方案--------------------
看你的这个表是什么引擎了。MYISAM表是表级别的锁。INNODB是行级别的锁。其他的看手册。
所以如果是MYISAM。如果一个表被UPDATE,或者SELECT,其他的操作必须等待这个完成才能操作。其他类型的表以此类推。
------解决方案--------------------
我看你这问题还不是一般的麻烦,,mysql是一个总端对多个client的数据库,一般locked的时间会很短