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

Er det muligt at INDSÆTTE og derefter VÆLGE den indsatte række efter hinanden?

HVIS DU BRUGER INNODB:

Hvis du bruger INNODB, siden du bekræftede, at rækken blev indsat, skulle den være blevet returneret med SELECT, så længe SELECT forespurgte nøglen til den faktiske række, der blev indsat. (Er du sikker på, at du ikke bruger en funktion som f.eks. INDSÆT FORSINKET? Det kunne forhindre rækken i at blive returneret.)

HVIS DU BRUGER MYISAM:

Da MyISAM ikke understøtter transaktioner, bør SELECT returnere indsættet, men jeg kan ikke finde noget, der siger, at dette faktisk er garanteret.

BEMÆRK:Den første URL listet nedenfor angiver, at hvis du bruger MYISAM (standarden ifølge dette link), vil INSERTS låse tabellen. Den anden URL angiver dog, at låsen placeret af en indsætning er en læsbar lås, så det burde ikke have forhindret tabellen i at blive læst.

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

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

HVIS DU BRUGER INNODB (FORTSAT):

    Hvis AUTOCOMMIT er i brug i dit system (jeg er ikke sikker), skulle du have set den valgte række (dette spørgsmål angiver, at den indsatte række er bekræftet som værende tilføjet til databasen).

    Hvis en transaktion er i brug, skal transaktionen være blevet begået (dette spørgsmål angiver, at den indsatte række blev bekræftet som værende tilføjet til databasen).

    Er du sikker på, at den SELECT-forespørgsel, der udføres første gang, er den samme som den anden gang?

    Er du sikker på $user['social_id'] er den samme værdi efter INSERT og på tidspunktet for SELECT?

    Hvis du af en eller anden grund bruger INSERT DELAYED, bliver rækken muligvis ikke returneret

BEMÆRK:I henhold til denne URL, HVIS du har startet en transaktion, vises de valgte rækker i den næste SELECT-sætning (ikke i PHP):

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

Denne erklæring antyder, at hvis du starter en transaktion, behøver du ikke indstille AUTOCOMMIT:

"MySQL begår også automatisk udsagn, der ikke er en del af en transaktion."

Denne URL beskriver, hvordan man starter en transaktion i PHP:

Eksempler på PHP + MySQL transaktioner




  1. Lagring af SqlServers raiserror-meddelelse i C#

  2. @ Symbol - en løsning til rekursiv SELECT-forespørgsel i Mysql?

  3. pymysql callproc() ser ud til at påvirke efterfølgende valg

  4. Hvorfor kører den 2. T-SQL-forespørgsel meget hurtigere end den første, når den kaldes af Reporting Services 2005 i en web-app