Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est-il possible d'INSERER puis de SÉLECTIONNER la ligne insérée l'une après l'autre ?

SI VOUS UTILISEZ INNODB :

Si vous utilisez INNODB, puisque vous avez vérifié que la ligne a été insérée, elle aurait dû être renvoyée avec le SELECT, tant que le SELECT interrogeait la clé de la ligne réelle insérée. (Êtes-vous sûr de ne pas utiliser une fonctionnalité telle que INSERT DELAYED ? Cela pourrait empêcher le renvoi de la ligne.)

SI VOUS UTILISEZ MYISAM :

Étant donné que MyISAM ne prend pas en charge les transactions, le SELECT devrait renvoyer l'insert, mais je ne trouve rien qui indique que cela est réellement garanti.

REMARQUE :La première URL répertoriée ci-dessous indique si vous utilisez MYISAM (la valeur par défaut selon ce lien), INSERTS verrouillera la table. Cependant, la deuxième URL indique que le verrou placé par une insertion est un verrou lisible, ce qui n'aurait pas dû empêcher la lecture de la table.

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

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

SI VOUS UTILISEZ INNODB (SUITE) :

    Si AUTOCOMMIT est utilisé dans votre système (je ne suis pas sûr), vous devriez avoir vu la ligne sélectionnée (cette question indique que la ligne insérée a été vérifiée comme ayant été ajoutée à la base de données).

    Si une transaction est en cours d'utilisation, la transaction doit avoir été validée (cette question indique que la ligne insérée a été vérifiée comme ayant été ajoutée à la base de données).

    Êtes-vous sûr que la requête SELECT qui est exécutée la première fois est la même que celle la deuxième ?

    Êtes-vous sûr que $user['social_id'] est la même valeur après l'INSERT et au moment du SELECT ?

    Si, pour une raison quelconque, vous utilisez INSERT DELAYED, la ligne peut ne pas être renvoyée

REMARQUES :Selon cette URL, SI vous avez démarré une transaction, les lignes sélectionnées sont affichées dans la prochaine instruction SELECT (pas en PHP) :

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

Cette déclaration implique que si vous commencez une transaction, vous n'avez pas besoin de définir AUTOCOMMIT :

"MySQL valide également automatiquement les instructions qui ne font pas partie d'une transaction."

Cette URL décrit comment démarrer une transaction en PHP :

Exemples de transactions PHP + MySQL