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

Er det begrebsmæssigt rigtigt at lave et SELECT MAX(id) osv. for at finde den sidst indsatte række?

Dette virker subjektivt, men jeg vil sige nej, det er ikke begrebsmæssigt rigtigt, fordi:

  • du vil have den senest indsatte række
  • men din forespørgsel ser på det maksimale id værdi

Ja, der er en sammenhæng mellem max id og seneste indsættelse, men overvej følgende:

  • hvad hvis den senest indsatte række blev slettet?

Svar på MySQL:du får forskellige resultater. Bemærk, at der ikke engang behøver at være multithreading eller flere processer for at dette mislykkes. Det er fordi de er to forskellige ting (som ganske vist ofte kan give de samme resultater).

select max(id) from <tablename>

vs

select last_insert_id()

(Gæt hvilken der er rigtig.)

@Dems påpegede, at OP er tvetydig. Jeg vil præcisere min hovedpointe:

Vi taler om tre forskellige oplysninger:

  • maksimum id værdi
  • id af rækken, der senest er indsat, specifik for en session
  • id af rækken, der senest er indsat i tabellen (uanset session)

Det farlige er, at nogle gange vil forespørgsel efter én give det rigtige svar for en anden -- men ikke altid .



  1. MySQL:Navngiv primærnøgle i CREATE TABLE-sætning

  2. SQLite JSON_INSERT()

  3. Hvordan retter jeg fejlen 'Named Pipes Provider, fejl 40 - Kunne ikke åbne en forbindelse til' SQL Server'?

  4. Hvordan forbinder man en C# Windows mobile 6.5-app til en Postgres-database?