Avatar billede 1416 Nybegynder
27. juni 2000 - 10:05 Der 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.
Avatar billede doeleman Nybegynder
27. juni 2000 - 10:19 #1
Du kan bruge attributen AUTO_INCREMENT

CREATE TABLE navne (
id varchar(64) AUTO_INCREMENT,
navn varchar(64),
);
Avatar billede alvion Nybegynder
27. juni 2000 - 10:21 #2
Jo, der findes autonummerering.

Lav dit autonummererede felt (f.eks. id) således:

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.
Avatar billede 1416 Nybegynder
27. juni 2000 - 10:28 #3
hmmm det virker ikke...
den siger:
There ca only be one auto colum and it must be defined as a key
Avatar billede 1416 Nybegynder
27. juni 2000 - 10:29 #4
alvion: prøver lige dit forslag
Avatar billede 1416 Nybegynder
27. juni 2000 - 10:34 #5
det virker :-)
Avatar billede alvion Nybegynder
27. juni 2000 - 10:42 #6
Det var godt. :-)

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)
Avatar billede 1416 Nybegynder
27. juni 2000 - 10:47 #7
du er jo en gud :-) takker
Avatar billede alvion Nybegynder
27. juni 2000 - 10:48 #8
Årh, det var da lige så voldsomt ;-)

Men velbekomme.
Avatar billede doeleman Nybegynder
27. juni 2000 - 11:24 #9
alvion >>
Hedder det ikke auto_increment, istedet for auto increment ??!?
Avatar billede 1416 Nybegynder
27. juni 2000 - 14:35 #10
jo det gør ;-)
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