Wie lege ich Fremdschlüsseleinschränkungen in MySQL fest?
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); ".
(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, ...)
[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:
Beispiel: Einschränkung „fk_1“ oder Einschränkung „fk_1“ ist falsch. Beispiel 1: 4.1 Create Table Product (Category Int Not Null, ID Int Not Null, Price Decimal, create table product_order (kein int nicht null auto_increment, REFERENZEN Kunde( id)) TYPE=INNODB; (6) Beschreibung: 1外键约束,最好是采用: ON UPDATE CASCADE ON DELETE RESTRICT 的方式.
(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
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.
Primary Key (Category, ID)) Type = InnoDB; ATE TABLE CUSTOMER (ID INT NOT NULL,
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)
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!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MySQL muss für Finanzsysteme optimiert werden: 1. Finanzdaten müssen verwendet werden, um die Genauigkeit mit dem Dezimalart zu gewährleisten, und DateTime wird in Zeitfeldern verwendet, um Zeitzonenprobleme zu vermeiden. 2. Indexdesign sollte angemessen sein, häufig Aktualisierungen von Feldern zum Erstellen von Indizes vermeiden, Indizes in Abfragereihenfolge kombinieren und nutzlose Indizes regelmäßig reinigen. 3.. Verwenden Sie Transaktionen, um Konsistenz zu gewährleisten, Transaktionsgranularität zu kontrollieren, lange Transaktionen und in IT eingebettete Nicht-Kern-Operationen zu vermeiden und die entsprechenden Isolationsniveaus basierend auf dem Unternehmen auszuwählen. 4. Historische Daten nach Zeit partitionieren, Kaltdaten archivieren und komprimierte Tabellen verwenden, um die Abfrageeffizienz zu verbessern und den Speicher zu optimieren.

Tooptimizemysqlforreal-timedatafeeds, FirstChoosetheinnodBstorageEngineFortransactions und -Siebrelz, UsememoryOrcksdbfortemporaryData und Partitiontime-Seriesdatabytime.Second, indexstrategisch, miteinander, miteinander, ororderyklategisch, miteinander, ororderyklategisch, miteinander, ororderyklategisch, miteinander, ororderbykolnisch,

Tosecuremysqleffectival, useObject-LevelpivilegestolimituserAccessbasedonTheirspecificneeds.BeginByCundingTingTHatObject-LevelilegesApplytodatabasen, Tabellen, Orcolumns, Opferincontrolholtlobobobobobobobe

MySQL Performance und Wartbarkeit stehen vor Herausforderungen mit großen Tabellen, und es ist notwendig, von der Strukturdesign, der Indexoptimierung, der Tabellen-Untertisch-Strategie usw. zu beginnen. 1. Ausgestaltet Primärschlüssel und -indizes: Es wird empfohlen, Selbstverlustzahlen als Primärschlüssel zu verwenden, um Seitenspaltungen zu reduzieren. Verwenden Sie Overlay -Indizes, um die Effizienz der Abfrage zu verbessern. Analysieren Sie regelmäßig langsame Abfrageprotokolle und löschen Sie ungültige Indizes. 2. Rationaler Nutzung von Partitionstabellen: Partition nach Zeitbereich und anderen Strategien zur Verbesserung der Abfrage- und Wartungseffizienz, aber der Aufteilung und dem Abschneiden von Problemen sollte die Aufmerksamkeit geschenkt werden. 3.. Überlegen Sie, wie Sie Lesen und Schreiben von Trennung und Bibliothekstrennung erwägen: Lesen und Schreiben von Trennung lindern den Druck auf die Hauptbibliothek. Die Bibliothekstrennung und die Tabellentrennung eignen sich für Szenarien mit einer großen Datenmenge. Es wird empfohlen, Middleware zu verwenden und Transaktions- und Cross-Store-Abfrageprobleme zu bewerten. Frühe Planung und kontinuierliche Optimierung sind der Schlüssel.

Die MySQL -Replikationsfilterung kann in der Hauptbibliothek oder der Slave -Bibliothek konfiguriert werden. Die Hauptbibliothek steuert die Binlog-Erzeugung über Binlog-DO-DB oder Binlog-IGNORE-DB, das zum Reduzieren des Protokollvolumens geeignet ist. Die Datenanwendung wird durch Replikat-DO-DB, Replicate-Ignore-DB, Replicate-Do-Tisch, Replikat-Ignore-Tisch und Wildcard-Regeln Replicate-Wild-Do-Table und Replicate-Wild-Ignore-Tisch gesteuert. Es ist flexibler und förderlicher für die Datenwiederherstellung. Bei der Konfiguration müssen Sie auf die Reihenfolge der Regeln, das Verhalten des Cross-Store-Anweisungen achten,

ToimProvemysqlPerformanceForCmSlatforms -ähnlichem WordPress, firstImplementAcachingLayeruSuSlinslikedisorMemcached, EnableMysqlQueryCaching (ifappletable), andusepageCachingPluginStoServestaticFiles

DeleterEmovesspezifikorallrows, KeepStablestructure, erlaubtRollbackAndtriggers und doesnotresetauto-Inkremente; 2.Truncatequicklyremovesallrows, ResetsAuto-Increment, kann nicht berberollt, die Mostcasen, die Notfiriggers und Keepstructure;

Überprüfen Sie, ob der MySQL -Dienst ausgeführt wird. Verwenden Sie SudosystemctlstatUSmysql, um zu bestätigen und zu starten. 2. Stellen Sie sicher, dass die Bindungsadresse auf 0,0,0,0 eingestellt ist, um Remote-Verbindungen zu ermöglichen und den Dienst neu zu starten. 3. Überprüfen Sie, ob der 3306 -Port geöffnet ist, und konfigurieren Sie die Firewall -Regeln, um den Port zuzulassen. 4. Für den Fehler "AccessDenied" müssen Sie den Benutzernamen, den Kennwort und den Hostnamen überprüfen und sich dann bei MySQL anmelden und die Tabelle mySQL.User abfragen, um die Berechtigungen zu bestätigen. Erstellen oder aktualisieren Sie den Benutzer bei Bedarf und autorisieren Sie ihn, z. B. "Your_User"@'%". 5. Wenn die Authentifizierung aufgrund von caching_sha2_password verloren geht
