Mysql
 sql >> Database >  >> RDS >> Mysql

È possibile INSERIRE e poi SELEZIONARE la riga inserita una dopo l'altra?

SE UTILIZZI INNODB:

Se stai usando INNODB, poiché hai verificato che la riga è stata inserita, dovrebbe essere stata restituita con SELECT, purché SELECT stesse interrogando la chiave della riga effettiva che è stata inserita. (Sei sicuro di non utilizzare una funzione come INSERT DELAYED? Ciò potrebbe impedire la restituzione della riga.)

SE UTILIZZI MYISAM:

Poiché MyISAM non supporta le transazioni, SELECT dovrebbe restituire l'inserto, ma non riesco a trovare nulla che indichi che questo è effettivamente garantito.

NOTA:il primo URL elencato di seguito indica che se stai utilizzando MYISAM (l'impostazione predefinita secondo questo link), INSERTS bloccherà la tabella. Tuttavia, il secondo URL afferma che il blocco inserito da un inserto è un blocco leggibile, quindi ciò non avrebbe dovuto impedire la lettura della tabella.

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

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

SE UTILIZZI INNODB (CONTINUA):

    Se AUTOCOMMIT è in uso nel tuo sistema (non ne sono sicuro) dovresti aver visto la riga selezionata (questa domanda afferma che la riga inserita è stata verificata come aggiunta al database).

    Se una transazione è in uso, la transazione deve essere stata confermata (questa domanda afferma che la riga inserita è stata verificata come aggiunta al database).

    Sei sicuro che la query SELECT che viene eseguita la prima volta sia la stessa della seconda volta?

    Sei sicuro di $user['social_id'] è lo stesso valore dopo l'INSERT e al momento del SELECT?

    Se, per qualche motivo, stai utilizzando INSERT DELAYED, la riga potrebbe non essere restituita

NOTE:Secondo questo URL, SE hai avviato una transazione, le righe selezionate vengono mostrate nella successiva istruzione SELECT (non in PHP):

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

Questa affermazione implica che se inizi una transazione, non è necessario impostare AUTOCOMMIT:

"MySQL esegue automaticamente il commit delle istruzioni che non fanno parte di una transazione."

Questo URL descrive come avviare una transazione in PHP:

Esempi di transazioni PHP + MySQL