¿Cómo manejo las inserciones concurrentes en la tabla mysql y obtengo la id correcta?

Estoy usando adodb para la biblioteca PHP.

Para buscar el id en el que se inserta el registro, uso esta función

  "$ db-> Insert_ID ()" 

Quiero saber si hay insertos múltiples y simultáneos en la tabla de la base de datos. ¿Este método me devolverá el id. Insertado correcto para cada registro insertado?

La razón por la que estoy preguntando esto es porque utilizo esta última identificación de inserción para procesar otros registros y hacer entradas posteriores en las tablas relacionadas.

¿Este enfoque es lo suficientemente seguro o me falta algo?

Ayúdenme a formular un plan de trabajo adecuado para esto, de modo que pueda usar la última identificación de inserción para inserciones adicionales en la otra tabla de manera segura sin tener que meter la pata con los datos existentes.

Gracias

Sí, es seguro para el uso concurent. Eso es porque LAST_INSERT_ID() es por conexión, como se explica aquí :

La ID que se generó se mantiene en el servidor por conexión. Esto significa que el valor devuelto por la función a un cliente dado es el primer valor de AUTO_INCREMENT generado para la statement más reciente que afecta a una columna AUTO_INCREMENT por ese cliente. Este valor no puede verse afectado por otros clientes, incluso si generan sus propios valores AUTO_INCREMENT. Este comportamiento garantiza que cada cliente pueda recuperar su propia ID sin preocuparse por la actividad de otros clientes, y sin la necesidad de lockings o transacciones.

El $ db-> Insert_ID () le devolverá el último id de inserción, de modo que si está insertando muchos registros y desea obtener el id de cada última fila insertada, esto funcionará correctamente.

Quiero saber si hay insertos múltiples y simultáneos en la tabla de la base de datos. ¿Este método me devolverá el id. Insertado correcto para cada registro insertado?

Devolverá solo el ID insertado más recientemente.
Para obtener identificadores para inserciones múltiples, deberá llamar a INSERT_ID() después de que se ejecute cada instrucción. ES DECIR:

 INSERT INTO TABLE .... INSERT_ID() INSERT INTO TABLE .... INSERT_ID() 

… para obtener el valor de identificación para cada inserción. Si corrió:

 INSERT INTO TABLE .... INSERT INTO TABLE .... INSERT_ID() 

… solo devolverá la identificación para la última statement de inserción.

¿Este enfoque es lo suficientemente seguro o me falta algo?

Es más seguro que usar SELECT MAX(id) FROM TABLE , que corre el riesgo de devolver un valor insertado por otra persona, entre otras cosas, en relación con los niveles de aislamiento.