Avatar billede causasui Nybegynder
26. marts 2003 - 01:24 Der 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 ?
Avatar billede dsj Nybegynder
26. marts 2003 - 08:59 #1
SELECT LAST_INSERT_ID();

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.
Avatar billede dsj Nybegynder
26. marts 2003 - 09:05 #2
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).
Avatar billede andy Nybegynder
26. marts 2003 - 10:41 #3
Du kan lave "AUTO_INCREMENT" på din ID kolonne. Så behøver du ikke tænke på hvilket ID du skal indsætte.
Avatar billede andy Nybegynder
26. marts 2003 - 10:44 #4
Hvis din kolonne er sat til "AUTO_INCREMENT", kan du bruge $id = mysql_insert_id() efter du har lavet din INSERT query.
http://dk.php.net/manual/en/function.mysql-insert-id.php
Avatar billede causasui Nybegynder
26. marts 2003 - 12:49 #5
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
Avatar billede causasui Nybegynder
26. marts 2003 - 13:46 #6
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 !
Avatar billede andy Nybegynder
26. marts 2003 - 22:04 #7
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester