Senaste skapade raden i MySQL

Tråden skapades och har fått 3 svar. Det senaste inlägget skrevs .
1
  • Oregistrerad
  • 2004-06-18 15:25

Tjena!

Finns det något MySQL-kommando som kan ta fram den senaste raden man lägger till i en tabell? Har en tabell där varje rad har unikt "id" (auto_increment) och är intresserad av att veta vilket id som posten jag precis har lagt in har fått.

Just nu plockar jag ut alla rader i tabellen (sorterade efter id) och hämtar det översta. Tänker mig att det måste finnas ett bättre sätt att lösa problemet..

  • Medlem
  • Stockholm
  • 2004-06-18 15:35

Använder du något scriptspråk typ PHP? Då brukar det finnas färdiga funktioner för det, t.ex.
mysql_insert_id()

Annars kan du köra: SELECT LAST_INSERT_ID() ...

  • Oregistrerad
  • 2004-06-18 16:36
Ursprungligen av adlers:

Tjena!

Finns det något MySQL-kommando som kan ta fram den senaste raden man lägger till i en tabell? Har en tabell där varje rad har unikt "id" (auto_increment) och är intresserad av att veta vilket id som posten jag precis har lagt in har fått.

Just nu plockar jag ut alla rader i tabellen (sorterade efter id) och hämtar det översta. Tänker mig att det måste finnas ett bättre sätt att lösa problemet..

Har ingen mySQL-server i närheten, men testa:
select max(id) from tabell;

/Y

Ursprungligen av adlers:

Finns det något MySQL-kommando som kan ta fram den senaste raden man lägger till i en tabell? Har en tabell där varje rad har unikt "id" (auto_increment) och är intresserad av att veta vilket id som posten jag precis har lagt in har fått.

Finns inget specialkommando för just att hämta hela raden, men däremot finns det ju som sagt en funktion (LAST_INSERT_ID()) för att hämta senaste automatgenererade ID-numret. Problemet med den funktionen är bara att den inte är 100% tillförlitlig, eftersom den (1) inte uppdateras av klienter på parallella anslutningar, och (2) inte uppdateras vid manuell uppdatering av ID-värdet i en AUTO_INCREMENT-kolumn. Fördelen med det beteendet är att du oftast får det senaste ID-numret som du själv skapade, så det är ju en halvdan kompensation för den usla transaktionshanteringen.

Citat:

Just nu plockar jag ut alla rader i tabellen (sorterade efter id) och hämtar det översta. Tänker mig att det måste finnas ett bättre sätt att lösa problemet..

Finns inte så många andra tillförlitliga sätt, men det blir ju lite elegantare om du lägger till "LIMIT 1" i slutet på SQL-satsen. Det uppenbara problemet är ju iofs att du inte är 100% garanterad att få den senaste posten (utan bara den med högsta ID-numret), men det kanske du kan leva med. Allra bäst är det ju om det kan göras inom en isolerad transaktion så att du inte riskerar att se rader som samtidiga klienter hunnit skapa efter att du gjort din INSERT, men det är svårt att göra på ett säkert sätt i mysql.

1
Bevaka tråden