如何在 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;
}
?>
我正在尝试通过在两个浏览器上执行相同的脚本来测试是否仍然存在并发问题。
上面的脚本插入了 400 多条记录,而不是 999 条记录。当我向表中插入东西时如何正确锁定表。
I want to lock the table to prevent something like this to happen:
正如您所看到的,带有前缀“OC”的字段应该有一个等于自动增量主键的数字。
唯一可靠的解决方案是使用虚拟值进行插入,获取最后一个插入 ID,并将行更新为正确的值。
mysql_query("INSERT INTO table (field) VALUES (dummy);");
$id = mysql_last_insert_id();
mysql_query("UPDATE table SET field='OC{$id}' WHERE id={$id} LIMIT 1;");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)