我有一个php页面,有时需要在脚本开头写入数据库.
在计划的mysqldump备份期间,页面无法访问,因为它正在尝试写入已锁定的表.
在锁定期间,MySql将这些sql更新排队,并且在备份完成后,它们会根据需要执行.然而,在备份完成之前,我的php页面将不会显示.
但是,由于更新不会向脚本返回任何内容,我希望它们在锁定期间不会挂起我的脚本; 我希望有一种方法可以告诉php只是将sql更新发送到mysql并且不担心更新完成的确认.
我希望php将查询发送到mysql,如果更新未在一秒内完成,则继续执行下一行的php.
我在Windows服务器上运行php,所以我知道某种类型的线程不是一种选择.
如果有办法在该查询上设置超时(特别是),那可能是理想的,但如果超时,我不想完全违背sql更新.在锁定消失后,我仍然希望MySQL处理它.
你会推荐什么(考虑到完全删除sql更新不是一个选项)?
对于可能遇到此线程的其他人,我最终编写了此函数来检测表是否被锁定,并且仅在未锁定时才执行 SQL 更新:
function isLocked($databaseName,$tableName)
{
$sql = "show open tables from `".$databaseName."` where `table`=`".tableName."` and In_use > 0;";
$result = @mysql_query($sql);
if (mysql_num_rows($result) != 0 )
{
return true;
}
else
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
(注:该函数假设数据库连接已经建立)
这是可行的,因为我修改了代码,以便下次加载页面时最终完成 SQL 更新,而无需锁定。
| 归档时间: |
|
| 查看次数: |
442 次 |
| 最近记录: |