Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php中选择数据时,MySQL表被锁定多长时间?_Php_Mysql_Database_Locking - Fatal编程技术网

从php中选择数据时,MySQL表被锁定多长时间?

从php中选择数据时,MySQL表被锁定多长时间?,php,mysql,database,locking,Php,Mysql,Database,Locking,我现在正在玩MySQL和PHP,我想知道表锁。从MySQL文档中,我知道MySQL应用了表范围的读锁,这会导致其他查询等待select查询完成 当我使用PHP查询如下示例中的数据时: $dbConnection = mysql_connect($dbHost, $dbUser, $dbPass) mysql_select_db($dbName, $dbConnection) $qry = "select * from bigTable"; $result = mysql_query($qr

我现在正在玩MySQL和PHP,我想知道表锁。从MySQL文档中,我知道MySQL应用了表范围的读锁,这会导致其他查询等待select查询完成

当我使用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”中删除读锁

谢谢,,
Emi

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

$result = mysql_query($qry, $dbConnection);
因为您正在执行每查询事务

如果要执行更复杂的事务,请确保使用innodb引擎并启动事务:

mysql_query("START TRANSACTION", $dbConnection)
mysql_query("BEGIN", $dbConnection);
mysql_query("COMMIT", $dbConnection);
mysql_query("ROLLBACK", $dbConnection);
然后做你的工作:

  • 例如,阅读表格
  • 然后写一些值,等等
并提交或回滚事务:

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

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

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


选中innoDB it is on rowlock level

这是否意味着一旦mysql_查询方法返回,锁就会被释放?是的,这是一个事务。如果您想执行更复杂的事务(并因此在事务期间锁定表),则需要使用InnoDB并启动事务(请参阅我编辑的答案),谢谢。如果结果集非常大(或者甚至大到可以放入PHP内存),这也适用吗?是的,同样的原则也适用。也就是说,总是很难知道当记忆问题发生时会发生什么。我建议您批量加载数据,而不是一次加载。