Heim >Datenbank >MySQL-Tutorial >Wie lege ich Fremdschlüsseleinschränkungen in MySQL fest?

Wie lege ich Fremdschlüsseleinschränkungen in MySQL fest?

青灯夜游
青灯夜游Original
2020-10-12 12:46:4114968Durchsuche

So legen Sie Fremdschlüsseleinschränkungen in MySQL fest: Sie können Fremdschlüssel über das Schlüsselwort FOREIGN KEY angeben. Die Syntax lautet „ALTER TABLE Tabellenname ADD CONSTRAINT Fremdschlüsselname FOREIGN KEY (Spaltenname) REFERENCES Haupttabellenname (Spaltenname); ".

Wie lege ich Fremdschlüsseleinschränkungen in MySQL fest?

(Empfohlenes Tutorial: MySQL-Video-Tutorial)

(1) Die Verwendung von Fremdschlüsseln:

Es gibt zwei Hauptfunktionen:
eins Es geht darum Lassen Sie die Datenbank selbst die Integrität und Konsistenz der Daten durch Fremdschlüssel sicherstellen. Einige Leute denken, dass die Einrichtung von Fremdschlüsseln während der Entwicklung große Probleme mit sich bringen wird Datenbank: Manchmal gelingt es Entwicklern nicht, Vorgänge zu löschen und einzufügen, weil sie die Fremdschlüsselerkennung nicht bestehen. Sie finden dies sehr problematisch. Tatsächlich zwingt Sie dieser formale Fremdschlüssel dazu, die Integrität und Konsistenz der Daten sicherzustellen.
Zum Beispiel:
Es gibt eine Basisdatentabelle, um alle Informationen zum Produkt aufzuzeichnen. Die anderen Tabellen speichern alle Produkt-IDs. Bei der Abfrage müssen Sie die Tabelle verknüpfen, um den Namen des Produkts abzufragen. Die Produkttabelle von Dokument 1 verfügt über ein Produkt-ID-Feld und die Produkttabelle von Dokument 2 verfügt auch über ein Produkt-ID-Feld

. Wenn Sie keine Fremdschlüssel verwenden und in den Dokumenten 1 und 2 beide das Produkt mit der Produkt-ID = 3 verwenden und Sie den entsprechenden Datensatz mit der ID = 3 in der Produkttabelle löschen, können Sie das Produkt beim Anzeigen nicht finden Dokumente 1 und 2. Name.
Wenn nur wenige Tabellen vorhanden sind, denken manche Leute, dass die Integrität und Konsistenz der Daten durch das Schreiben von Skripten bei der Implementierung des Programms sichergestellt werden kann. Das heißt, beim Löschen eines Produkts wird geprüft, ob das Produkt mit der Produkt-ID 3 in den Dokumenten 1 und 2 verwendet wurde. Aber nachdem Sie mit dem Schreiben des Skripts fertig sind, fügt das System ein Dokument 3 hinzu, das auch die Produkt-ID speichert und ein Feld findet. Wenn Sie keine Fremdschlüssel verwenden, können Sie den Produktnamen trotzdem nicht finden. Sie können Ihr Skript nicht jedes Mal ändern, um zu erkennen, ob das Produkt verwendet wird, wenn Sie ein Dokument hinzufügen, das ein Feld mithilfe der Produkt-ID verwendet. Gleichzeitig verringert die Einführung von Fremdschlüsseln die Geschwindigkeit und Leistung.

(2) Das Format zum Hinzufügen von Fremdschlüsseln:ALTER TABLE yourtablename ADD [CONSTRAINT Foreign Key Name] FOREIGN KEY [id] (index_col_name, ...)

REFERENCES tbl_name (index_col_name, ...)

[ON DELETE {CASCADE |. NO ACTION}] [ON UPDATE {CASCADE | NO RESTRICT}]on delete/on update, wird zum Definieren von Lösch- und Aktualisierungsvorgängen verwendet. Es gibt verschiedene Einschränkungstypen für Aktualisierungs- und Löschvorgänge: CASCADE:
Der Wert des Fremdschlüsselfelds in der Fremdschlüsseltabelle wird aktualisiert oder die Spalte, in der es sich befindet, wird gelöscht.
RESTRICT:
RESTRICT ist auch gleichbedeutend mit keiner Aktion, das heißt, es wird keine Operation ausgeführt. Das heißt, die übergeordnete Tabelle weigert sich, die mit dem Fremdschlüssel verknüpfte Spalte zu aktualisieren und den Datensatz zu löschen Beim Aktualisieren oder Löschen wird die Fremdschlüsselspalte der untergeordneten Tabelle auf Null gesetzt.
Beim Einfügen kann der in die Fremdschlüsselspalte der untergeordneten Tabelle eingegebene Wert nur der vorhandene Wert der mit dem Fremdschlüssel verknüpften Spalte der übergeordneten Tabelle sein. Es tritt ein Fehler auf.



Fremdschlüsseldefinitionen erfüllen die folgenden Bedingungen: (Voraussetzung)
1)
Alle Tabellen müssen vom Typ InnoDB sein, sie können keine temporären Tabellen sein, die Fremdschlüssel in MySQL unterstützen.
2 )
Alle Felder, die als Fremdschlüssel eingerichtet werden sollen, müssen indiziert werden.
3)
Bei Nicht-InnoDB-Tabellen werden FOREIGN KEY-Untersätze ignoriert.
Hinweis:

Beim Erstellen eines Fremdschlüssels können Sie beim Definieren des Fremdschlüsselnamens keine Anführungszeichen hinzufügen.

Beispiel: Einschränkung „fk_1“ oder Einschränkung „fk_1“ ist falsch.
(3) Fremdschlüssel anzeigen:

SHOW CREATE TABELLE ** *; Sie können den Code der neu erstellten Tabelle und ihrer Speicher-Engine anzeigen.
Fremdschlüssel löschen:
Hinweis:
Nur außerhalb der Definition. Verwenden Sie bei Verwendung des Schlüssels die Einschränkung Fremdschlüsselname..., um das Löschen des Fremdschlüssels zu erleichtern. Wenn er nicht definiert ist, können Sie:
Zuerst eingeben: Tabelle ändern, Fremdschlüssel löschen -> an Es wird eine Fehlermeldung angezeigt. Der Standard-Fremdschlüsselname des Systems wird angezeigt. --->
Verwenden Sie ihn, um den Fremdschlüssel zu löschen

Beispiel 1: 4.1
Table Parent erstellen (id int not null,
Primärschlüssel (ID)
) Typ = InnoDB;- Typ = InnoDB entspricht Engine = InnoDB
Table Child erstellen (ID Int, P, P, P Arent_id int, Ar Index Par_ind (Parent_id),
Foreign Key (Parent_id) References Parent (ID)
On delete Cascade
) Type = InnoDB; Der Wert der parent_id in ld ist nur Es können die Daten im übergeordneten Element sein, andernfalls ist das Einfügen nicht erfolgreich;
Wenn der übergeordnete Datensatz gelöscht wird, wird auch der entsprechende Datensatz im untergeordneten Datensatz gelöscht;-->Weil: bei der Löschkaskade
Wenn der übergeordnete Datensatz aktualisiert wird, wird er nicht aktualisiert; -- >Da es nicht definiert ist, wird standardmäßig „restrict“ verwendet.
4.2
Wenn das untergeordnete Element wie folgt lautet:
mysql>
Tabelle erstellen child(id int not null Primary Key auto_increment,parent_id int,
index par_ind (parent_id ),
constraint fk_1 Fremdschlüssel (parent_id ) Referenzen
parent(id) bei Update-Kaskade bei Löscheinschränkung)
type=innodb;
Verwenden Sie das Obige:
1).
Wenn der übergeordnete Datensatz aktualisiert wird, wird der entsprechende Datensatz im Das untergeordnete Element wird ebenfalls aktualisiert;--> Weil: bei der Aktualisierungskaskade
2).
Es kann sich nicht um eine untergeordnete Tabellenoperation handeln, die sich auf die übergeordnete Tabelle auswirkt.
3).
Fremdschlüssel löschen:
Tabellenkind ändern, Fremdschlüssel fk_1 löschen;
Fremdschlüssel hinzufügen Schlüssel:
Tabellenkind hinzufügen, Einschränkung fk_1 Fremdschlüssel (Parent_ID)-Referenzen
Parent(ID) bei Aktualisierung, Einschränkung beim Löschen, Null setzen;


( 5) Es sind mehrere Fremdschlüssel vorhanden:

product_order-Tabelle für die anderen beiden Die Tabelle verfügt über Fremdschlüssel.

Ein Fremdschlüssel bezieht sich auf einen zweispaltigen Index in der Produkttabelle. Ein weiterer Einwegindex, der in der Kundentabelle angegeben ist:

Create Table Product (Category Int Not Null, ID Int Not Null, Price Decimal,
Primary Key (Category, ID)) Type = InnoDB; ATE TABLE CUSTOMER (ID INT NOT NULL,
                                                                                                                    

create table product_order (kein int nicht null auto_increment,
product_category int nicht null,
product_id int nicht null,
customer_id int nicht null,
primärer Key (Nein),
- 双 外键
Index (product_category, product_id) ,
                    FREMDER SCHLÜSSEL (Produktkategorie, Produkt_ID)
                     ELETE RESTRICT,
                     -- 单外键
                     INDEX (customer_id),
                    FOREIGN KEY. (customer_id)

                       REFERENZEN Kunde( id)) TYPE=INNODB;

(6) Beschreibung:

1外键约束,最好是采用: ON UPDATE CASCADE ON DELETE RESTRICT 的方式.

Das obige ist der detaillierte Inhalt vonWie lege ich Fremdschlüsseleinschränkungen in MySQL fest?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn