Toon posts:

[mysql] Unieke combinatie afdwingen*

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een tabel met 2 kollomen en ik wil instellen dat de combinatie uniek is. dus bv
adriaan zwolle
bassie zwolle
adriaan utrecht

ik wil dus voorkomen dat adriaan zwolle opnieuw wordt ingevoerd. Hoe kan ik dat doen? ik gebruik phpadmin. Ik kan dus de eerste kolom uniek maken maar dan kan adriaan utrecht niet meer. dus het gaat me om de combinatie's van de 2.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Een unique constraint op beide kolommen maken :?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

Je moet niet Unique hebben, maar voor alle velden waarvan je wilt dat ze samen uniek zijn Primary selecteren. Dan vormen ze als koppel de primary key (die uniek is).

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

P_de_B schreef op 17 februari 2004 @ 15:39:
Een unique constraint op beide kolommen maken :?
Dan limiteer je teveel.
Dan mogen Bassie Zwolle en Adriaan Utrecht ook niet meer.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
thnx! dat was hem. primairy is de oplossing :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
IceManX schreef op 17 februari 2004 @ 15:42:
[...]
Dan limiteer je teveel.
Dan mogen Bassie Zwolle en Adriaan Utrecht ook niet meer.
Als je een unique constraint legt op de 2 columns (de combinatie dus), een 'composite constraint' dus, werkt het perfect.
Je mag natuurlijk geen constraint leggen op die 2 kolommen apart, maar dat wou P_d_B ook niet zeggen.

Ivm die Primary Key: dat is niet de beste oplossing in dit geval. Je gebruikt je PK nl. om een relatie te leggen naar een andere tabel. Dat wil zeggen dat je het PK veld ook als foreign key moet opnemen in die andere tabel. In dit geval wil dat dus zeggen dat je zowel de naam als de gemeente als FK moet opnemen in de andere tabel.
Naast het feit dat dit onnodig is, is het ook veel trager omdat je strings gebruikt. Je PK is dus beter een simpel 'autonumber' field oid.
De beste oplossing is hier om een samengestelde unique constraint of unique index aan te leggen op die 2 columns.

[ Voor 36% gewijzigd door whoami op 17-02-2004 15:47 ]

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je kunt toch gewoon een unique constraint op een combinatie van kolommen? (of kan dat niet bij MySql? Dat zou kunnen, ken ik niet goed genoeg)

Je hoeft er niet perse een PK van te maken als je de gegevens uniek wilt hebben.
edit:

bedankt whoami ;)

[ Voor 18% gewijzigd door P_de_B op 17-02-2004 15:48 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

Ik kan het fout hebben, maar volgens mij kan dat niet in phpMyAdmin (of in MySQL?)

Ik heb het dus idd fout. Gewoon achter beide Unique selecteren ipv PK zoals ik zei.

[ Voor 35% gewijzigd door Robtimus op 17-02-2004 16:02 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 31-03 15:20
whoami schreef op 17 februari 2004 @ 15:45:
[...]
Ivm die Primary Key: dat is niet de beste oplossing in dit geval. Je gebruikt je PK nl. om een relatie te leggen naar een andere tabel. Dat wil zeggen dat je het PK veld ook als foreign key moet opnemen in die andere tabel. In dit geval wil dat dus zeggen dat je zowel de naam als de gemeente als FK moet opnemen in de andere tabel.
Hoewel een PK inderdaad dient om een uniek record terug te kunnen halen, is in MySQL het verschil met een UNIQUE key wat subtieler. Bij laatstgenoemde zijn (dubbele!) NULL values namelijk toegestaan, bij een PK niet.
Dit doet je afvragen wat er dan zo UNIQUE aan is als je twee records met NULLs invoegt...
Hou overigens de maximale key-lengte van 255 bytes in de gaten. Het is dus niet mogelijk om van twee VARCHAR(200) kolommen samen een UNIQUE te maken.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
IceManX schreef op 17 februari 2004 @ 15:59:
Ik kan het fout hebben, maar volgens mij kan dat niet in phpMyAdmin (of in MySQL?)
Dat kan ik moeilijk geloven. Als dat ook niet mogelijk is in MySQL, dan is MySQL imho gewoon waardeloos.
Trouwens, als je een PK op meerdere velden kunt leggen, dan moet het ook mogelijk zijn om een unique index op 2 of meerdere velden te leggen.

[ Voor 20% gewijzigd door whoami op 17-02-2004 16:03 ]

https://fgheysels.github.io/


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

bigtree schreef op 17 februari 2004 @ 16:00:
Hou overigens de maximale key-lengte van 255 bytes in de gaten. Het is dus niet mogelijk om van twee VARCHAR(200) kolommen samen een UNIQUE te maken.
Tis 500, net getest. Dit geldt echter ook voor PK.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

whoami schreef op 17 februari 2004 @ 16:02:
Dat kan ik moeilijk geloven. Als dat ook niet mogelijk is in MySQL, dan is MySQL imho gewoon waardeloos.
Trouwens, als je een PK op meerdere velden kunt leggen, dan moet het ook mogelijk zijn om een unique index op 2 of meerdere velden te leggen.
Ik had het al aangepast, ik had het fout.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
ik probeer jullie discussie een beetje te volgen maar ik ben de weg kwijt. Ik weet nog niet zoveel van mysql, daarom gebruik ik ook phpmyadmin. tot nu toe werkt de eerste oplossing van iceman en ik probeer nu meer te begrijpen waar jullie het over hebben maar lukt niet echt.

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 31-03 15:20
Misschien biedt deze link enige verduidelijking.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op 17 februari 2004 @ 16:15:
ik probeer jullie discussie een beetje te volgen maar ik ben de weg kwijt. Ik weet nog niet zoveel van mysql, daarom gebruik ik ook phpmyadmin. tot nu toe werkt de eerste oplossing van iceman en ik probeer nu meer te begrijpen waar jullie het over hebben maar lukt niet echt.
We hebben het hier over twee verschillende dingen

1) je kunt een (meerdere gecombineerd) kolom uniek maken. Dit voorkomt dubbele waarden in de kolom. Dit is een UNIQUE CONSTRAINT

2) Om een rij uniek te identificeren heb je een PRIMARY KEY nodig. Deze 'sleutel' wordt bijvoorbeeld ook gebruikt in relaties met andere tabellen. Automatisch dient deze ook uniek te zijn.

Beide dingen lijken wel op elkaar, maar zijn niet hetzelfde.

Oops! Google Chrome could not find www.rijks%20museum.nl

Pagina: 1