【发布时间】:2011-12-20 13:22:01
【问题描述】:
如何在 php 中锁定 mysql 表?我目前有这个代码:
$db->query("LOCK TABLES tbl_othercharge WRITE");
for($x=0;$x<=500; $x++){
$id = get_max();
$db->query("INSERT INTO tbl_othercharge SET tblocID = '$id', assessmentID='lock1'");
}
$db->query("UNLOCK TABLES");
这是 get_max() 函数,如果上面的脚本同时执行,显然会失败。
<?php
function get_max(){
global $db;
$max = $db->get_var("SELECT MAX(tblocNumber) FROM tbl_othercharge");
if($max == null){
$max = 1;
}else if($max >= 1){
$max = $max + 1;
}
return 'OC'.$max;
}
?>
我正在尝试通过在 2 个浏览器上执行相同的脚本来测试是否仍然存在并发问题。 上面的脚本插入了 400 多条记录而不是 999 条记录。在向其中插入东西时如何正确锁定桌子。
我想锁定表以防止发生这样的事情:
正如您所见,带有前缀“OC”的字段应该有一个等于自增主键的数字。
【问题讨论】:
-
为什么要锁表?
-
InnoDB 存储引擎和事务呢?
-
@EugenRieck:请看我的编辑
-
999 条记录?您的循环在 500 处停止。
-
@PiTheNumber : 1000 我应该说,因为如果我同时执行它应该会产生 1000 条记录。