1

我目前正在玩 MySQL 和 PHP,我想知道表锁。从 MySQL 文档中,我知道 MySQL 应用了表范围的读取锁,这可能导致其他查询等待选择查询完成。

当我使用 PHP 查询数据时,如下例所示:

$dbConnection = mysql_connect($dbHost, $dbUser, $dbPass) 
mysql_select_db($dbName, $dbConnection) 

$qry = "select * from bigTable";
$result = mysql_query($qry, $dbConnection);

//Read Data

mysql_close($dbConnection);

从 PHP 代码的角度来看,何时会从“bigTable”中删除读锁?

谢谢你,埃米

4

2 回答 2

3

在读取查询结束时释放锁:

$result = mysql_query($qry, $dbConnection);

因为您正在执行每个查询事务。

如果您想做更复杂的事务,请确保使用 innodb 引擎并启动事务:

mysql_query("START TRANSACTION", $dbConnection)
mysql_query("BEGIN", $dbConnection);

然后做你的工作:

  • 例如阅读一张桌子
  • 然后写一些值等。

并提交或回滚事务:

mysql_query("COMMIT", $dbConnection);
mysql_query("ROLLBACK", $dbConnection);

取决于您是否希望更改通过。

于 2012-09-03T12:49:35.613 回答
0

它被锁定,直到您选择的所有内容都被读取,具体取决于表引擎,锁定范围从整个表到行条目。

检查 innoDB 是否处于行锁级别

于 2012-09-03T12:50:30.707 回答