1. FremdschlüsseleinschränkungenMySQL verwendet Fremdschlüsseleinschränkungen, um die Integrität und Genauigkeit der Daten zwischen Tabellen sicherzustellen. Was ist ein Fremdschlüssel:Primärschlüssel: Identifiziert einen Datensatz eindeutig, kann nicht dupliziert werden, darf nicht leer sein und wird verwendet, um die Datenintegrität sicherzustellen Fremdschlüssel: Dies ist der Primärschlüssel einer anderen Tabelle. Fremdschlüssel können Duplikate enthalten und leer sein. Sie werden verwendet, um Verbindungen mit anderen Tabellen herzustellen. Wenn wir also von Fremdschlüsseln sprechen, müssen mindestens zwei Tabellen beteiligt sein. Beispielsweise die folgenden beiden Tabellen: Voraussetzungen für die Verwendung von Fremdschlüsseln: 1. Beide Tabellen müssen InnoDB-Tabellen sein. MyISAM-Tabellen unterstützen derzeit keine Fremdschlüssel (es heißt, dass zukünftige Versionen dies möglicherweise unterstützen, aber zumindest derzeit nicht); Vorteile von Fremdschlüsseln: Sie können zwei Tabellen verknüpfen, die Datenkonsistenz sicherstellen und einige kaskadierende Operationen implementieren. Die Definitionssyntax eines Fremdschlüssels lautet:
Diese Syntax kann in CREATE TABLE und ALTER TABLE verwendet werden. Wenn Sie das Symbol CONSTRAINT nicht angeben, generiert MYSQL automatisch einen Namen.
Einfache DemonstrationsnutzungErstellen Sie zwei Tabellen, dage und xiaodi. Die große Brudertabelle ist der Primärschlüssel und die kleine Brudertabelle ist der Fremdschlüssel. Erstellen Sie eine Tabelle: CREATE TABLE `dage` ( `id` int(11) NICHT NULL auto_increment, `name` varchar(32) Standard '', PRIMÄRSCHLÜSSEL (`id`)) ENGINE=InnoDB STANDARD-ZEICHENSATZ=latin1; TABELLE `xiaodi` erstellen ( `id` int(11) NICHT NULL auto_increment, `dage_id` int(11) standardmäßig NULL, `name` varchar(32) Standard '', Primärschlüssel (`id`), SCHLÜSSEL `dage_id` (`dage_id`), EINSCHRÄNKUNG `xiaodi_ibfk_1` FREMDER SCHLÜSSEL (`dage_id`) REFERENZEN `dage` (`id`) )ENGINE=InnoDB STANDARD-CHARSET=latin1; Füge einen großen Bruder ein: mysql> in dage(Name) Werte einfügen('Causeway Bay'); Abfrage OK, 1 Zeile betroffen (0,01 Sek.) mysql> wähle * von Tag; +----+--------+ | Ich würde | Name | +----+--------+ | 1 | Causeway Bay | +----+--------+ 1 Zeile im Satz (0,00 Sek.) Füge einen kleinen Bruder ein: mysql> einfügen in xiaodi(dage_id,name) Werte(1,'Causeway Bay_Little Brother A'); Abfrage OK, 1 Zeile betroffen (0,02 Sek.) mysql> wähle * von xiaodi; +----+---------+--------------+ | ID | Tages-ID | Name | +----+---------+--------------+ | 1 | 1 | Causeway Bay_Kleiner Bruder A | +----+---------+--------------+ Den großen Bruder löschen: mysql> löschen von Tag, wo ID=1; FEHLER 1451 (23000): Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl (`bstar/xiaodi`, EINSCHRÄNKUNG `xiaodi_ibfk_1` FREMDER SCHLÜSSEL (`dage_id`) VERWEISE `dage` (`id`)) Tipp: Nein, es gibt Einschränkungen. Der große Bruder hat jüngere Brüder unter sich, er kann uns nicht im Stich lassen! Neues Kind einfügen: mysql> einfügen in xiaodi(dage_id,name) Werte(2,'旺角_小弟A'); FEHLER 1452 (23000): Eine untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl (`bstar/xiaodi`, EINSCHRÄNKUNG `xiaodi_ibfk_1` FREMDER SCHLÜSSEL (`dage_id`) VERWEISE `dage` (`id`)) Tipp: Junge, du willst rebellieren! Du hast noch keinen großen Bruder! Fügen Sie Ereignisauslöserbeschränkungen zu Fremdschlüsseleinschränkungen hinzu: mysql> zeige, erstelle Tabelle xiaodi; EINSCHRÄNKUNG `xiaodi_ibfk_1` FREMDER SCHLÜSSEL (`dage_id`) REFERENZEN `dage` (`id`) mysql> Tabelle ändern, xiaodi, Fremdschlüssel löschen, xiaodi_ibfk_1; Abfrage OK, 1 Zeile betroffen (0,04 Sek.) Datensätze: 1 Duplikate: 0 Warnungen: mysql> Tabelle ändern xiaodi, Fremdschlüssel (dage_id) hinzufügen, Referenzen auf dage(id) beim Löschen der Kaskade beim Aktualisieren der Kaskade; Abfrage OK, 1 Zeile betroffen (0,04 Sek.) Datensätze: 1 Duplikate: 0 Warnungen: 0 Versuchen Sie erneut, den großen Bruder zu löschen: mysql> löschen von Tag, wo ID=1; Abfrage OK, 1 Zeile betroffen (0,01 Sek.) mysql> wähle * von Tag; Leerer Satz (0,01 Sek.) mysql> wähle * von xiaodi; Leerer Satz (0,00 Sek.) Ups, diesmal ist der entsprechende jüngere Bruder weg, das geht nicht, wer hat dir gesagt, dass du bei mir die Kaskade löschen sollst (Kaskadenbeschränkung)! Zu beachtende Punkte
Dies ist das Ende dieses Artikels mit der kurzen Einführung in die Verwendung und Beschreibung von MySQL-Primärschlüsseln und -Fremdschlüsseln. Weitere relevante MySQL-Primärschlüssel und -Fremdschlüssel finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
>>: Wozu dient das Feld „enctype“ beim Hochladen von Dateien?
Möglicherweise ist Ihnen aufgefallen, dass auf die...
Wenn Sie zur Implementierung eines Kontrollkästch...
Inhaltsverzeichnis Vorwort Blasensortierung Grund...
1. Was ist ein Proxyserver? Proxyserver: Wenn der...
Inhaltsverzeichnis 1. Gemeinsame Funktionen höher...
Während der Projektentwicklung bin ich gestern auf...
In diesem Artikelbeispiel wird der spezifische Ja...
Frage Im vorherigen Artikel zur domänenübergreife...
In diesem Artikel wird der spezifische JavaScript...
Die meisten der ersten Computer konnten nur ASCII...
Dieser Artikel beschreibt das Beispiel der MySQL-...
Inhaltsverzeichnis Problem 1: Zerstörung 1. Wie m...
Ich habe viele Tutorials gelesen, aber festgestel...
Inhaltsverzeichnis 1. Verwenden Sie die UUID-Funk...
Win10 installiert die dekomprimierte Version von ...