Avatar billede deepcore Nybegynder
09. marts 2005 - 11:15 Der er 8 kommentarer og
2 løsninger

autogenere fortløbende primærnøgle når tabel oprettes

Hvordan autoopretter man en primærnøgle når en tabel i fortløbende numre jeg vil gerne sætte nogle bogstaver foran og dermed oprette nøglen som en char(6)

eksempel:
en simpel tabel med to kolonner:
Tabel bruger: Primær nøgle id char(6), navn char(60)

når man opretter en ny bruger skal denne oprettes således:

id            navn
------------------
pk0000        Jakob
pk0001        Mogens
pk0002        Bo


Jeg ved ikke om en primærnøgle i mysql kan være null, men hvis
den kan - kan man så ikke lave noget med auto_increment når man
sætter en nøgle ind som null?
Avatar billede fsconsult.dk Nybegynder
09. marts 2005 - 11:22 #1
med MySQL kan mig mig bekendt kun autogenerere nøgler som tal.  og du burde ikke lægge logik i indeholdet af nøglen.

hvis du fortæller MySQL at et felt har AUTO_NUMBER, så vil MySQL automatisk tildele værdien til feltet, hvis du ikke angiver det eller angiver det med null value.

En primær nøgle er vel altid krævet at den ikke må være null?  (det er normalt kun fremmednøgler der kan have nulls allowed...)
Avatar billede -thomas- Nybegynder
09. marts 2005 - 11:23 #2
Du kan ikke lave auto_increment på et char-felt.

Kan du ikke lave det sådan her?

CREATE TABLE `tabel` (
  `Prefix` char(2) default NULL,
  `ID` int(6) unsigned NOT NULL auto_increment,
  `Navn` char(60) default NULL,
  PRIMARY KEY  (`ID`)
) TYPE=MyISAM;

Så Prefix er bogstaverne foran og ID er nummeret.
Hvis du indsætter NULL i et autoincrement-felt, vil den selv indsætte det næste nummer.
Avatar billede deepcore Nybegynder
09. marts 2005 - 11:45 #3
hmmm :o/ det er der jo ikke noget at gøre ved... måske kan jeg løse mit aktuelle problem på en anden måde...
er det muligt at lave en trigger således at jeg, hvis jeg benytter prefix-id metoden kan sammenlægge de to data i en anden celle?

fx:
prefix  Id    prefixogid    Navn     
pk      0000  pk0000        Jakob
pk      0001  pk0001        Mogens
pk      0002  pk0002        Bo
Avatar billede fsconsult.dk Nybegynder
09. marts 2005 - 11:53 #4
forudsætter du bruger en version der understøtter triggers...  er det 5.1 de kommer i???
Avatar billede -thomas- Nybegynder
09. marts 2005 - 12:03 #5
Triggers kommer først i version 5.0.2.

Men ellers kan du jo gøre det i koden, når du indsætter, hvis du mener, at det er nødvendigt med ét felt, der indeholder både prefix og id??
Avatar billede -thomas- Nybegynder
09. marts 2005 - 12:30 #6
Du kunne f.eks. gøre det sådan uden at bruge triggers:

INSERT INTO tabel VALUES ('pk', NULL, CONCAT('pk', CONCAT(LAST_INSERT_ID() + 1)), 'Navn')
Avatar billede deepcore Nybegynder
09. marts 2005 - 13:20 #7
mtjoooo.... ideen er at mine primærnøgler indeholder et bogstav fra hver stavelse i tabelnavnet (gør det nemmere at hitte rundt i nøglerne).

men siden mysql ikke har triggers må jeg jo klare det selv, foretrækker ellers at lægge den del af logikken i db, øv!

nå, i svarede jo begge, så hvis i begge gider svare.

... point
Avatar billede fsconsult.dk Nybegynder
09. marts 2005 - 13:23 #8
svar
Avatar billede -thomas- Nybegynder
09. marts 2005 - 13:30 #9
Svar

Kan nu ikke lige se det smarte i at have tabellens navn som en del af primærnøglen - det er da spild af plads.
Avatar billede deepcore Nybegynder
09. marts 2005 - 17:38 #10
heller ikke navnet, blot to karaktere. det gør det nemmere for mig når jeg jonglerer rundt med store udtryk.
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