我对MySQL表lock
有几个问题。如果有人回答我很感激:)
在以下情况下,MySQL会自动锁定表格:
SELECT id FROM members;
UPDATE members SET name = 'john' WHERE id = 7;
这两者有什么区别:
LOCK TABLE items READ ; SELECT * FROM 'items;
SELECT * FROM 'items';
出于某种原因,我认为MySQL会在必要的场合自动锁定表格!如何检查锁定何时以及如何发生?
谢谢。
答案 0 :(得分:2)
1.a)无需锁定
1.b)锁定表(myisam引擎)或者如果你使用innodb引擎你有行级锁定
2.a)锁定表以进行读取操作(直到释放此锁定,不发生写入操作)
2.b)无需锁定
正如Lithu T.V建议的那样,请阅读DOCS以获取所有用例。
答案 1 :(得分:0)
据我所知,在mysql中,表格不会自动锁定。但这取决于你使用什么。 例如,使用SqlTransaction时,受影响的表将被锁定,直到您提交或回滚为止。
一个。你首先锁定表,这将确保在你读表时,没有其他人可以锁定它来写,你会遇到死锁;) 湾在某些特殊情况下,锁定表可能会阻止您读取表,因此sql失败。
使用“SHOW OPEN TABLES”,您将看到所有可用的表及其锁定状态 由于要排除的系统表,它有点复杂,如:
$sql = "SHOW OPEN TABLES FROM '".$db_name."' WHERE In_use > 0 AND 'Table' IN ("; $tables = count($array_tables_names); for($i = 0; $i < $tables; $i++): $sql .= "'".$array_tables_names[$i]."'"; if($i < ($tables-1)) $sql .= ","; endfor; $sql .= ")";
有关锁的更多信息,请访问: http://dev.mysql.com/doc/refman/5.1/en//lock-tables.html