sql >> Base de Datos >  >> RDS >> Mysql

¿Es posible INSERTAR y luego SELECCIONAR la fila insertada una tras otra?

SI ESTÁ UTILIZANDO INNODB:

Si está utilizando INNODB, ya que verificó que se insertó la fila, debería haber sido devuelto con SELECT, siempre que SELECT estuviera consultando la clave de la fila real que se insertó. (¿Está seguro de que no está utilizando una función como INSERTAR DEMORADO? Eso podría evitar que se devuelva la fila).

SI USTED ESTÁ UTILIZANDO MYISAM:

Dado que MyISAM no admite transacciones, SELECT debería devolver la inserción, pero no puedo encontrar nada que indique que esto está realmente garantizado.

NOTA:La primera URL enumerada a continuación indica que si está utilizando MYISAM (la predeterminada según este enlace), INSERTS bloqueará la tabla. Sin embargo, la segunda URL establece que el bloqueo colocado por una inserción es un bloqueo legible, por lo que no debería haber impedido que se leyera la tabla.

http://www.sitepoint.com/mysql-mistakes-php-developers/

http://aarklondatabasetrivia blogspot.com/2009/04/how-to-lock-and-unlock-tables-in-mysql.html

SI USTED ESTÁ UTILIZANDO INNODB (CONTINUACIÓN):

    Si AUTOCOMMIT está en uso en su sistema (no estoy seguro), debería haber visto la fila seleccionada (esta pregunta indica que se verificó que la fila insertada se agregó a la base de datos).

    Si una transacción está en uso, la transacción debe haberse confirmado (esta pregunta indica que se verificó que la fila insertada se agregó a la base de datos).

    ¿Está seguro de que la consulta SELECT que se ejecuta la primera vez es la misma que la segunda vez?

    ¿Estás seguro de que $user['social_id'] es el mismo valor después de INSERT y en el momento de SELECT?

    Si, por algún motivo, está utilizando INSERTAR DEMORADO, es posible que no se devuelva la fila

NOTAS:De acuerdo con esta URL, SI ha iniciado una transacción, las filas seleccionadas se muestran en la siguiente instrucción SELECT (no en PHP):

http://zetcode.com/databases/mysqltutorial/transactions/

Esta declaración implica que si comienza una transacción, no necesita configurar AUTOCOMMIT:

"MySQL también confirma automáticamente declaraciones que no son parte de una transacción".

Esta URL describe cómo iniciar una transacción en PHP:

Ejemplos de transacciones PHP + MySQL