27. juni 2000 - 10:05Der er
9 kommentarer og 1 løsning
Autonummerering?
Hejsa! Der findes ikke noget ala Access Autonummerering i mySQL, vel? Jeg kan i hvertfald ikke finde noget om det. DERFOR: Jeg har denne sql-sætning (pseudo) strSQL = "INSERT INTO navne(id, navn) VALUES (SELECT MAX(id)+1 FROM navne,'"&strnavn&"')"
Er jeg på rette spor? Jeg ved godt, at det nok er lettere, at gøre det i 2 sql-sætning; altså først finde max id, også sætte den nye post ind, men jeg vil helst have det gjort i samme.
create table navne ( id int unsigned not null auto increment, navn varchar(50) not null, primary key (id) );
Når du så indsætter records, kan du bagefter aflæse det autonummererede felt med funktionen last_insert_id():
insert into navn (navn) values ('bla bla');
select last_insert_id() as lstId;
Det autonummererede felt behøver ikke at hedde id, selvom funktionen hedder last_insert_id() :-)
Hvis du bruger ASP (og dermed ADO) til at arbejde med databasen, kan du opleve at
select last_insert_id();
ikke returnerer nogen record (afhængig af, hvilken version af MyODBC/MySql du bruger). Det kan løses med istedet at skrive således:
select id from navne where id = last_insert_id();
Det fungerer altid.
MySql's autonummerering begrænses kun af, hvilken integer type du vælger at bruge. Brug altid unsigned typer, da autonummereringen ikke benytter negative værdier.
Nu ved jeg i øvrigt ikke så meget andet om dine tabeller, men må jeg lige foreslå, at du lader alle dine strings være char istedet for varchar? (som jeg ellers skrev ;-)
Udelukkende af performance hensyn, da varchar er _lidt_ langsommere end char og pladsen fra slettede records kan ikke genbruges, når du indsætter en ny, pga. den variable record størrelse.
Det giver dog lige den ulempe, at alle strenge, som er mindre end feltets maksimum "paddes" med mellemrum i halen af strengen. Det løses dog tjept med en trim() i dit vbscript, og er en langt hurtigere løsning, hvis du regner med mange records (>10.000)
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.