¿Cómo bloqueo tablas mysql en php? Actualmente tengo este código:Cómo bloquear tablas mysql en 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");
Aquí está la función get_max(), que, obviamente, se producirá un error si la secuencia de comandos se ejecuta simultáneamente.
<?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;
}
?>
Estoy tratando de comprobar si todavía hay problemas de concurrencia ejecutando el mismo script en 2 navegadores. El script anterior inserta más de 400 registros en lugar de 999 registros. ¿Cómo bloqueo correctamente la tabla mientras inserto algo en ella?
quiero bloquear la tabla para evitar que algo como esto suceda:
Como se puede ver el campo con el prefijo 'OC' en la que debe tener un número que es igual al incremento automático Clave primaria.
¿Y por qué querrías cerrar la mesa? –
¿Qué pasa con el motor de almacenamiento InnoDB y las transacciones? – CodeZombie
@EugenRieck: vea mi edición –