FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Låt säga att jag har ett fält som heter ID i en tabell i en MySql-databas. ID är av typen int och har tilldelats auto_increment. Hur kan jag göra för att ta reda på nästa tal som auto_increment genererar om jag inte har några rader i den databastabellen redan? Det är inte säkert att auto_increment börjar räkna från 0 så det är inte säkert att första raden i tabellen tilldels 1 i fältet ID.
[EDIT] Programmeringsspråket jag använder mig av är PHP. |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Medlem
|
$result = mysql_query("SHOW TABLE STATUS like 'tabellnamn'");
$row = mysql_fetch_assoc($result); echo "Nästa värde = " . $row['Auto_increment']; |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Flitig postare
|
Tack för det!
|
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Banned
|
Du bör inte lita på det. Eftersom MySQL stödjer flera anslutningar, så kan någon annan ta IDt..
|
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
Du kan även använda dig av http://se2.php.net/mysql_insert_id för att ta reda på nästa id, om du lika gärna ha skickat in nånting.
|
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
mysql_query("LOCK TABLES mintabell WRITE") or die("error");
$result = mysql_query("SELECT MAX(ID) AS LAST_ID FROM mintabell") or die("error"); $result = mysql_fetch_array($result); echo "Last id = " . $result[LAST_ID]; mysql_query("UNLOCK TABLES"); Ovanstånde ska vara säkert. |
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Nykomling
|
Var med på att SimonP's metod inte klarar ut att hämta ID't om tabellen är tom. Men byta ut "SELECT MAX(ID) AS LAST_ID FROM mintabell" mot "SHOW TABLE STATUS like 'mintabell'" som mbomelin föreslog innan borde lösa det hela.
|
||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Medlem
|
Max(ID) stämmer inte alltid då man faktiskt kan ställa auto_increment-sekvensen till vilket nummer som helst. Låt säg att max(ID) = 12, men du har ställt in auto_increment för tabellen att fortsätta på 1000.
mysql_insert_id() sätts ju bara om du kör en update, delete eller insert mot tabellen så det känns onödigt i detta fallet. Sen är ju frågan varför man vill veta det innan man stoppar in nåt i tabellen? Stoppa in din data, ta reda på vilket id raden fått med hjälp av mysql_insert_id() och använd sen värdet till vad det nu är du gör i ditt script. Det är mitt absoluta tips. |
||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Flitig postare
|
Jo, att stoppa in datan och ta reda på id:t efter med mysql_insert_id är ju det absolut bästa, men just i detta specifika läget så ska nästa id presenteras innan datan har lagts i databasen. Dock får man veta det "rätta" id:t när datan har lagts i databasen.
|
||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Medlem
|
Tänk på att det id du visar inte säkert blir nästa id om det är ett multiuser-system.
Fler akan vara påloggade samtidigt och få samma information, om den ena gör en action som stoppar in nåt nytt i tabellen så stämmer inte infon som visas för den andra usern. |
||
![]() |
![]() |
Svara |
|
|