/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[MySQL] ændre primær nøgle
Fra : Søren


Dato : 22-05-07 06:32

Jeg har en tabel, som jeg har en masse data i og derfor helst ikke vil
slette. Jeg skal dog ændre den primære nøgle i tabellen. For nede viser
jeg hvordan jeg oprettede tabellen. Jeg skal ændre primær nøglen fra at
være 'varenr' til at være 'varegruppe' - det betyder, at 'varegruppe'
ændrer status fra at være sekundær nøgle til at være primær nøgle. Jeg
forestiller mig følgende SQL kommandoer:

Først vil jeg slette primær og sekundær nøgle

DELETE FROM tilbehoer
WHERE primary key = ’varenr’

DELETE FROM tilbehoer
WHERE foreign key = ’varegruppe’

Herefter skal den nye primær nøgle tilføjes

ALTER TABLE tilbehoer
ADD primary key(varegruppe)

Mit spørgsmål er, om jeg gør det på den rigtige måde og om min SQL
sætninger er rigtige.

/Søren


CREATE TABLE TILBEHOER (
varenr varchar(5) not null,
varegruppe integer(4) not null,
fabrikant integer(3) not null,
model varchar(25) not null,
energimaerke integer(2) not null,
info char(1000),
pris integer(5) not null,
billede varchar(100),
primary key(varenr),
unique(varenr),
foreign key(varegruppe) references varegruppe(vgruppe),
foreign key(fabrikant) references fabrikant(id),
foreign key(energimaerke) references energimaerke(id));

 
 
Jens Gyldenkærne Cla~ (22-05-2007)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-05-07 08:59

Søren skrev:

> Jeg har en tabel, som jeg har en masse data i og derfor helst
> ikke vil slette. Jeg skal dog ændre den primære nøgle i
> tabellen.

Hvad er årsagen til at du vil ændre primærnøglen?


> Jeg skal ændre primær nøglen fra at være 'varenr' til at være
> 'varegruppe' - det betyder, at 'varegruppe' ændrer status fra
> at være sekundær nøgle til at være primær nøgle.

Det vil betyde at du så kun kan have ét styk tilbehør fra hver
varegruppe i tabellen - er det det du er ude efter?

Hvis tabellen skal indeholde information om de varegrupper du har,
er det korrekt nok at gøre varegruppe til primærnøgle - men det
indebærer at du gør fabrikant, model, pris (og alle andre felter i
tabellen) direkte afhængige af varegruppen. Det lyder ikke
umiddelbart sandsynligt.

> Først vil jeg slette primær og sekundær nøgle
>
> DELETE FROM tilbehoer
> WHERE primary key = ´varenr´

No go (med forbehold for mærkværdige mysql-kontruktioner). DELETE
er en kommando der sletter poster (rækker) i tabellen - jeg antager
at du er ude efter en kommando der fjerner et felt (en kolonne).

Det er i givet fald:

ALTER TABLE tilbehoer DROP COLUMN varenr;

- du skal dog muligvis droppe din nøglecontraint først. Men som
nævnt ovenfor, tror jeg slet ikke du skal ændre din primærnøgle.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

soren (22-05-2007)
Kommentar
Fra : soren


Dato : 22-05-07 14:35

On 22 Maj, 09:59, Jens Gyldenkærne Clausen <j...@gyros.invalid> wrote:

> > Jeg skal ændre primær nøglen fra at være 'varenr' til at være
> > 'varegruppe' - det betyder, at 'varegruppe' ændrer status fra
> > at være sekundær nøgle til at være primær nøgle.
>
> Det vil betyde at du så kun kan have ét styk tilbehør fra hver
> varegruppe i tabellen - er det det du er ude efter?

Ja, det er det jeg er ude på.

> Hvis tabellen skal indeholde information om de varegrupper du har,
> er det korrekt nok at gøre varegruppe til primærnøgle - men det
> indebærer at du gør fabrikant, model, pris (og alle andre felter i
> tabellen) direkte afhængige af varegruppen. Det lyder ikke
> umiddelbart sandsynligt.

Udgangspunktet var, at tabellen skulle indeholde informationer om hhv.
produkter og tilbehør. Men det er IKKE mit fokus lige nu med mit
spørgsmål.

> - du skal dog muligvis droppe din nøglecontraint først. Men som
> nævnt ovenfor, tror jeg slet ikke du skal ændre din primærnøgle.

Jo, det er lige det jeg skal. Hvordan dropper jeg min nøglecontraint?
Er det ved at skrive

ALTER TABLE tilbehoer DROP primary key(varenr);

... og så tilføje den nye primær nøgle

ALTER TABLE tilbehoer ADD primary key(varegruppe);

Du må ikke så meget tænke på baggrund og fornuft i det jeg vil gøre
for det er mere ændringen i primær nøglen jeg er ude efter.

/Søren


Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste