Làm cách nào để khóa bảng mysql bằng php? Tôi hiện đang có mã này:Cách khóa bảng mysql trong php
$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");
Đây là hàm get_max(), rõ ràng sẽ thất bại nếu tập lệnh ở trên thực hiện đồng thời.
<?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;
}
?>
Tôi đang cố gắng kiểm tra xem có vấn đề đồng thời hay không bằng cách thực thi cùng một tập lệnh trên 2 trình duyệt. Đoạn mã trên chèn hơn 400 bản ghi thay vì 999 bản ghi. Làm thế nào để tôi khóa bàn đúng cách trong khi tôi đang chèn thứ gì đó vào đó.
Tôi muốn khóa bàn để ngăn chặn một cái gì đó như thế này xảy ra:
Như bạn có thể thấy lĩnh vực với tiền tố 'OC' trên nó nên có một số tương đương với các tính năng tự động tăng khóa chính.
Và tại sao bạn muốn khóa bàn? –
Còn công cụ lưu trữ và giao dịch InnoDB thì sao? – CodeZombie
@EugenRieck: vui lòng xem bản sửa đổi của tôi –