Zwei Spalten-Primärschlüssel in MySQL
Ich habe ein sehr einfaches problem und eine Lösung, die funktionieren wird, aber ich bin auf der Suche nach einer einfacheren.
Möchte ich verhindern, dass Zeilen, die Hinzugefügt wird, um eine Datenbank, wenn mehrere Werte gleich Sie vorhandene Werte. Zum Beispiel, wenn a2=a1 UND b2=b1 dann die Daten, wird abgelehnt. Wenn nur a2=a1 oder nur b2=b1 ist es erlaubt. Im Grunde möchte ich es, zu handeln wie ein Primärschlüssel erfordert, dass beide Werte übereinstimmen.
Ich weiß, ich kann dies tun, durch die Validierung, bevor ich in die Datenbank schreiben--ex. select * where a='a2' und b='b2' und dann vermeiden Sie das schreiben von neuen Daten, wenn ich die Ergebnisse erhalten. Was würde ich lieber tun, ist ermöglichen eine MySQL-Einstellung, wie primary key, zu blockieren, Daten wie diese automatisch.
Ich bin nicht sehr vertraut mit MySQL außerhalb von Basis-features, also entschuldigt, wenn das ist trivial einfach. Googeln für alle möglichen Dinge rund eindeutigen index und Primärschlüssel nicht helfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie einen eindeutigen index für die Spalten, die Sie wollen, einzigartig zu sein.
ZB:
Finden Sie in der MySQL Create index Handbuch.
Möchten Sie verwenden die MySQL -
CONSTRAINT
- syntax bei der Erstellung der Tabelle (oder ändern Sie eine vorhandene Tabelle).Zusätzlich zu dem, was gcores sagt, möchte ich hinzufügen, dass es sich bei dem alternativen Vorschlag, der Validierung in der Anwendungsschicht, ist eine schlechte Sache zu tun. Was passiert, wenn zwei Anwendungen versuchen, fügen Sie die gleichen Daten, und Sie sind interleaved? Sie können beide prüfen, sehen die Daten nicht gibt, und dann beide einfügen. Wenn Sie einen eindeutigen index, es gibt zwei Vorteile: