从php中选择数据时,MySQL表被锁定多长时间?
我现在正在玩MySQL和PHP,我想知道表锁。从MySQL文档中,我知道MySQL应用了表范围的读锁,这会导致其他查询等待select查询完成 当我使用PHP查询如下示例中的数据时:从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
$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内存),这也适用吗?是的,同样的原则也适用。也就是说,总是很难知道当记忆问题发生时会发生什么。我建议您批量加载数据,而不是一次加载。