2016-11-23 3 views
2

Ich habe einen älteren Code gefunden, der zwei fast identische Einschränkungen (UNIQUE und PRIMARY KEY) für das Primärschlüsselfeld festlegt. HierMySQL. UNIQUE- und PRIMARY KEY-Einschränkungen für das gleiche Feld

ist das Codebeispiel:

CREATE TABLE foofoo (
    id NUMERIC(9) NOT NULL , 
    bar VARCHAR(40) NOT NULL, 

    CONSTRAINT PK_foofoo PRIMARY KEY (id), 
    CONSTRAINT UNIQUE_foofoo UNIQUE(id) 
) 

Ich denke, es überflüssig ist, diese beiden Sets zu haben und PRIMARY KEY würde die Arbeit machen.

Natürlich, ich lese, was der Unterschied zwischen diesen beiden Bedingungen ist, aber

was ist der Sinn, diese beiden Bedingungen für das gleiche Gebiet der Einstellung?

+0

Mögliche Duplikat von [Unterschied zwischen Primärschlüssel und eindeutigen Schlüssel] (http://stackoverflow.com/questions/9565996/difference-between-primary -key-and-unique-key) – e4c5

+0

e4c5 Ich frage nicht nach Unterschied, ich frage, warum jemand diese beiden Bedingungen für das gleiche Feld festlegen sollte. Vielleicht gibt es einen Grund dafür. – Benas

+1

@ e4c5, wie denkst du, dass es ein Duplikat der verknüpften Antwort ist? können Sie erklären. – Rahul

Antwort

2

Es hat keinen Sinn, dies zu tun. Ein Primärschlüssel ist von Natur aus immer einzigartig. Ich rate davon ab, beide Indizes zu erstellen, da Indizes mit Kosten einhergehen (hauptsächlich Speicherplatz). Erstelle einfach den PK und du wirst gut sein!

+1

Auch, da Sie diese Frage stellen, empfehle ich Ihnen dringend, so viel wie möglich auf Indizes zu lesen.Sie sind eine wunderbare Sache, extrem praktisch, aber sie sind ein zweischneidiges Schwert. Sie können sehr groß werden, wenn sie achtlos verwendet werden, können aber Wunder bewirken, wenn sie richtig verwendet werden. Ein einfacher Kommentar hier würde kaum die Oberfläche zerkratzen, also ja, ich empfehle das Thema zu lesen. Durch das Hinzufügen eines einfachen Index habe ich Abfragen von wenigen Minuten auf wenige Sekunden beschleunigt. Aber wieder, achten Sie darauf, was Sie tun, können sie am Ende kosten Sie mehr als sie Ihnen geben. –

+1

Ich habe Datenbanken mit buchstäblich Gigabites von nutzlosen Indizes gesehen ... Vergessen Sie auch nicht, dass diese auch mit Ihrer Datenbank gesichert werden. Wenn Sie also häufige Backups einrichten, wie jede Nacht oder so ähnlich, werden Ihre Indizes nicht nur Ihre Produktionsdatenbank vergrößern, sondern auch Ihre Backups und ggf. Ihre Entwicklungsdatenbank (en) vergrößern. Also noch einmal, lesen Sie sie auf, sie sind wunderbar, aber missbrauchen Sie sie nicht! –

1

Es hat keinen Sinn, genau die gleiche Einschränkung wie die PK zu setzen.

Ein Primärschlüssel stellt bereits sicher, dass diese Spalte eindeutig und indiziert ist.

1

Ich denke, es ist überflüssig ...

Ja in der Tat, es ist überflüssig; Da die Spalte "Primärschlüssel" für die Spalte ohnehin gilt, wird sichergestellt, dass die Spalte nur einen eindeutigen Wert hat. Es hat keinen Sinn, eine zusätzliche UNIQUE Einschränkung für dieselbe Spalte zu definieren.

1

, wenn Sie erklären primäre dann: * PRIMARY KEY-Einschränkung eindeutig identifiziert jeden Datensatz in einer Datenbanktabelle * Primärschlüssel eindeutige Werte enthalten muss so sie ist nicht notwendig, Primärschlüssel eindeutig zu erklären, weil, wenn u etwas Primärschlüssel deklariert dann UNIQUE Wert ist bereits bei ihnen angebracht. Für eindeutigen Schlüssel: * Die UNIQUE-Einschränkung identifiziert jeden Datensatz in einer Datenbanktabelle eindeutig. * Die UNIQUE- und PRIMARY KEY-Einschränkungen bieten beide eine Garantie für die Eindeutigkeit für eine Spalte oder einen Satz von Spalten. * Für eine PRIMARY KEY-Einschränkung ist automatisch eine UNIQUE-Einschränkung definiert. Der wichtigste Punkt ist, dass * Beachten Sie, dass Sie viele UNIQUE-Einschränkungen pro Tabelle haben können, aber nur eine PRIMARY KEY-Einschränkung pro Tabelle. In mysql, wenn ich das gleiche wie Primärschlüssel und Unique dann gab es mir Fehler

Verwandte Themen