FAQ |
Kalender |
2007-10-22, 16:15 | #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. |
||
Svara med citat |
2007-10-22, 16:47 | #2 | ||
|
|||
Medlem
|
$result = mysql_query("SHOW TABLE STATUS like 'tabellnamn'");
$row = mysql_fetch_assoc($result); echo "Nästa värde = " . $row['Auto_increment']; |
||
Svara med citat |
2007-10-22, 17:23 | #3 | ||
|
|||
Flitig postare
|
Tack för det!
|
||
Svara med citat |
2007-10-22, 22:30 | #4 | ||
|
|||
Banned
|
Du bör inte lita på det. Eftersom MySQL stödjer flera anslutningar, så kan någon annan ta IDt..
|
||
Svara med citat |
2007-10-22, 23:37 | #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.
|
||
Svara med citat |
2007-10-22, 23:54 | #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. |
|||
Svara med citat |
2007-10-23, 00:20 | #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.
|
||
Svara med citat |
2007-10-24, 15:25 | #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. |
||
Svara med citat |
2007-10-24, 15:38 | #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.
|
||
Svara med citat |
2007-10-24, 23:01 | #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 med citat |
Svara |
|
|