26. marts 2003 - 01:24Der er
5 kommentarer og 2 løsninger
Hente næstkommende unik id i en tabel
Jeg har brug for at hente id værdien ud for den næst kommende id, dvs. jeg vil gerne vide hvilken unik id den næste record for når jeg indsætter den, hvordan gør jeg det ?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hvis du gør det inden for en transaktion, er du sikker på der ikke bliver indsat en ny tupel i mellemtiden, hvis altså transaktionsniveaut er REPEATABLE_READ:
autocommit=false; begin; insert into table values(...); SELECT LAST_INSERT_ID(); commit;
Så skulle den returnerer det ID, som blev brugt i insert-statementet.
Skal du bruge det næstkommende ID lægger du selvfølgelig bare 1 til. Det virker naturligvis også uden brug af transaktioner, der kan du bare ikke være sikker på at funktionen LAST_INSERT_ID(); returnerer den rigtige værdi, da du kan være uheldig at der er indsat en anden ny tupel i mellemtiden. Det hører dog til sjælenhederne at det sker, med mindre din database virkelig har travlt :) Faktisk skal transaktionsniveauet være SERIALIZABLE, hvilket ikke altid er hensigtsmæssigt at køre med (kan kost dyrt i performance).
Tak for de mange bud, men mit problem er at jeg ikke skal hente mit id ud efter en insert, men før. Og jeg har prøvet fidusen med + 1, men problemet er her hvis alle f.eks 35 records i tabellen af brugeren er slettet, returnere den f.eks 1, i stedet for i mit tilfælde 36, som jo egentligt er et udtryk for det næste id
Jeg droppede det fuldstændigt og fandt en anden løsning der var mere holdbar.. Så andy hvis du lige smider et svar så kan jeg dele points ud... Men thanks anyway !
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.