Heim  >  Artikel  >  Datenbank  >  Mehrtabellenbetrieb der MySQL-Datenbank

Mehrtabellenbetrieb der MySQL-Datenbank

jacklove
jackloveOriginal
2018-06-11 23:15:243216Durchsuche

1. Fremdschlüssel

1. Was ist ein Fremdschlüssel? Ein Fremdschlüssel bezieht sich auf die Referenzierung einer oder mehrerer Spalten in einer anderen Tabelle oder Eindeutigkeitsbeschränkungen. Fremdschlüssel werden verwendet, um die Verbindung zwischen Daten in zwei Tabellen herzustellen und zu stärken.


Die GID in der Schülertabelle ist die Klassen-ID des Schülers, die die Primärschlüssel-ID in der Note ist Tisch. Dann kann GID als Fremdschlüssel für die Tabelle Student verwendet werden. Die referenzierte Tabelle, also die Tabelle grade, ist die Master-Tabelle; die Tabelle, die auf den Fremdschlüssel verweist, also die Tabelle student, ist die Slave-Tabelle, und die beiden Tabellen stehen in einer Master-Slave-Beziehung. Die Schülertabelle kann GID verwenden, um die Informationen in der Notentabelle zu verbinden und so eine Verbindung zwischen den Daten in den beiden Tabellen herzustellen.

Nach der Einführung des Fremdschlüssels kann die Fremdschlüsselspalte nur den Wert einfügen, der in der Referenzspalte vorhanden ist, und der referenzierte Wert der Referenzspalte kann nicht gelöscht werden, wodurch die referenzielle Integrität der Daten.

2. Fremdschlüsseleinschränkungen zur Tabelle hinzufügen

Wenn Sie die Daten zweier Tabellen wirklich verbinden möchten, müssen Sie der Tabelle Fremdschlüsseleinschränkungen hinzufügen. Das Syntaxformat zum Hinzufügen von Fremdschlüsseleinschränkungen zu einer Tabelle lautet wie folgt: Tabelle ändern Tabellenname Einschränkung hinzufügen FK_ID Fremdschlüssel (Fremdschlüsselfeldname) verweist auf Fremdschlüsseltabellennamen (Primärschlüsselfeldname)

Beim Hinzufügen von Fremdschlüsseleinschränkungen zu einer Tabelle müssen einige Dinge beachtet werden, wie folgt:

(1) Die einzurichtende Tabelle Ein Fremdschlüssel muss vom Typ InnoDB sein, nicht vom Typ Temporäre Tabelle. Da nur Tabellen vom Typ InnoDB in MySQL Fremdschlüssel unterstützen.

(2) Bei der Definition von Fremdschlüsselnamen können keine Anführungszeichen hinzugefügt werden, z. B. die Einschränkung „FK_ID“ oder die Einschränkung „FK_ID“, die beide falsch sind.

Wenn die Daten in der Haupttabelle gelöscht werden, sollten auch die Daten in der Slave-Tabelle gelöscht werden, da sonst viele bedeutungslose Junk-Daten entstehen. MySQL kann beim Erstellen von Fremdschlüsseln Lösch- oder Aktualisierungsklauseln hinzufügen, um der Datenbank mitzuteilen, wie die Generierung von Datenmüll vermieden werden soll. Das spezifische Syntaxformat lautet wie folgt:

Alter table table name addconstraint FK_ID Foreign Key (Fremdschlüsselfeldname) verweist auf den externen Tabellennamen (Primärschlüsselfeldname);

[on delete{cascade |. set null |. strict}]

[on update{cascade | die folgende Tabelle:

Parametername

Funktionsbeschreibung

参数名称

功能描述

Cascade

删除包含与已删除键值有参照关系的所有记录

Set null

修改包含与已删除键值有参照关系的所有记录,使用null值替换(不能用于已标记为not null的字段)

No action

不进行任何操作

Restrict

拒绝主表删除或修改外键关联列。(在不定义on delete和on update子句时,这是默认设置,也是最安全的设置)

Kaskade Entfernen Sie enthaltende und gelöschte Schlüssel aller Datensätze mit Referenzbeziehungen
Null setzen Ändern Sie alle Datensätze, die Verweise auf die gelöschten Schlüsselwerte enthalten, und ersetzen Sie sie durch Nullwerte (kann nicht für Felder verwendet werden, die als nicht null markiert wurden)
Keine Aktion Keine Aktion
Einschränken Lehnen Sie die Haupttabelle ab, um die mit dem Fremdschlüssel verknüpfte Spalte zu löschen oder zu ändern. (Dies ist die Standardeinstellung und die sicherste Einstellung, wenn die Klauseln on delete und on update nicht definiert sind)

3. Fremdschlüsseleinschränkungen löschen: Tabellennamen ändern, Fremdschlüsselnamen löschen; >

2. Funktionsweise der Assoziationstabelle

1. Assoziationsbeziehung


(1) Viele-zu-eins: In der

viele

-zu- Eine Tabellenbeziehung. Fremdschlüssel sollten nebenbei mit mehr s und s erstellt werden, da es sonst zu Datenredundanz kommt.

(2) Viele-zu-viele: z. B. Stundenplan und Kursplan. Um diese Beziehung zu realisieren, muss normalerweise eine Zwischentabelle (Join-Tabelle genannt) definiert werden. Diese Tabelle verfügt über zwei Fremdschlüssel, die jeweils auf den Kursplan und die Studententabelle verweisen. Bei einer Viele-zu-Viele-Beziehung ist zu beachten, dass die beiden Fremdschlüssel, die die Tabelle verbinden, wiederholbar sind, die Beziehung zwischen den beiden Fremdschlüsseln jedoch nicht wiederholt werden kann, sodass die beiden Fremdschlüssel mit denen der Tabelle identisch sind. Primärschlüssel der Union.

(3) Eins-zu-eins: Zunächst muss die Master-Slave-Beziehung unterschieden werden. Die Slave-Tabelle erfordert beispielsweise die Existenz der Master-Tabelle Tabelle, die ID-Karte ist die Slave-Tabelle und der Fremdschlüssel wird in der Slave-Tabelle eingerichtet. Es ist zu beachten, dass diese Beziehung in Datenbanken nicht üblich ist, da auf diese Weise gespeicherte Informationen normalerweise in einer Tabelle abgelegt werden. In der tatsächlichen Entwicklung kann die Eins-zu-Eins-Assoziationsbeziehung in den folgenden Aspekten angewendet werden. Ø Eine Tabelle mit vielen Spalten aufteilen; Ø Einen Teil einer Tabelle aus Sicherheitsgründen isolieren;

Ø Temporäre Daten speichern und mühelos löschen können. Diese Tabelle löscht die Daten .

2. Daten hinzufügen

Nachdem die obige Anweisung erfolgreich ausgeführt wurde, werden die Daten zwischen den beiden Tabellen angezeigt verwandt. Sex. Wenn Sie die Schüler in der Softwareklasse 1 abfragen möchten, müssen Sie zuerst die ID der Softwareklasse 1 abfragen und dann die Schüler in der Schülertabelle basierend auf dieser ID abfragen.

3. Daten löschen: Aufgrund der Beziehung zwischen der Notentabelle und der Schülertabelle kann der referenzierte Wert der Referenzspalte nicht gelöscht werden. Achten Sie daher beim Löschen einer Softwareklasse darauf, zuerst alle Schüler in der Klasse und dann die Klasse zu löschen.

(1) Löschen Sie alle Schüler in Software-Klasse 1


(2) Löschen Sie in der Notentabelle Software-Klasse 1

Wenn Sie Softwareklasse 2 direkt löschen, tritt ein Fehler auf:

Es ist zu beachten, dass Sie in tatsächlichen Situationen „ „Software-Klasse 1“ Es besteht keine Notwendigkeit, „Studenten der Software-Klasse 1“ zu löschen. Sie können gid=1 in der Schülertabelle in gid=null ändern, solange die Spalte in der Haupttabelle nicht von der Slave-Tabelle referenziert wird. es kann gelöscht werden. Beim Erstellen der Tabelle unterliegt das GID-Feld jedoch einer Nicht-Null-Beschränkung, sodass in diesem Beispiel nur Schüler gelöscht werden können.

3. Verbindungsabfrage: Wenn in zwei oder mehr Tabellen Felder mit derselben Bedeutung vorhanden sind, können Sie diese Felder verwenden, um Verbindungsabfragen für verschiedene Tabellen durchzuführen.

1. Querverbindung: Das zurückgegebene Ergebnis ist das kartesische Produkt aller Datenzeilen in den beiden verbundenen Tabellen, d. h. die Anzahl der Datenzeilen in der ersten Tabelle, die die Abfragebedingungen erfüllen, wird multipliziert mit zurückgegeben die zweite Die Anzahl der Datenzeilen in der Tabelle, die die Abfragebedingungen erfüllen. Das Syntaxformat ist wie folgt:

Wählen Sie * aus Tabelle 1, Kreuzverknüpfung, Tabelle 2;


Von der Die obigen Ergebnisse können Sie sehen. Es ist ersichtlich, dass das Ergebnis der Querverbindung die Kombination aller Daten in den beiden Tabellen ist. Es ist zu beachten, dass diese Anforderung in der tatsächlichen Forschung und Entwicklung selten ist und im Allgemeinen nicht verwendet wird. Für die Durchführung der zielgerichteten Datenerhebung werden bestimmte Bedingungen herangezogen.

2. Interne Verbindung: auch als einfache Verbindung oder natürliche Verbindung bekannt. Verwenden Sie Vergleichsoperatoren, um die Daten der beiden Tabellen zu vergleichen, die Datenzeilen aufzulisten, die den Join-Bedingungen entsprechen, und sie zu neuen Datensätzen zu kombinieren. Das Syntaxformat ist wie folgt:

Abfragefeld aus Tabelle 1 auswählen [inner] Tabelle 2 in Tabelle 1 verbinden. Beziehungsfeld = Tabelle 2. Beziehungsfeld

kann auch mit bedingten Where-Anweisungen implementiert werden Gleiche Funktionalität.

Obwohl die Abfrageergebnisse dieser beiden Methoden gleich sind, handelt es sich bei Inner Join um eine Inner Join-Anweisung, und wo ist eine bedingte Beurteilungsanweisung. Sie können direkt danach weitere Bedingungen hinzufügen wo. Die innere Join-Anweisung kann nicht.

#Wenn bei einer Join-Abfrage die beiden beteiligten Tabellen dieselbe Tabelle sind, wird diese Art von Abfrage als Self-Join-Abfrage bezeichnet. Self-Join ist eine besondere Art von Join. Dies bedeutet, dass die miteinander verbundenen Tabellen physisch dieselben Tabellen sind, jedoch logisch in zwei Tabellen unterteilt sind. Wenn Sie beispielsweise abfragen möchten, welche Mitarbeiter sich in der Abteilung von Wang Hong befinden Verwenden Sie eine Self-Join-Abfrage.

3. Die Tabelle links vom Schlüsselwort wird als Koordinaten bezeichnet, und das Wort rechts wird als rechte Tabelle bezeichnet

Wählen Sie das abzufragende Feld aus Tabelle 1 aus. Left|right [Outer] Join Tabelle 2

Auf Tabelle 1. Relationales Feld = Tabelle 2. Relationales Feld, wobei Bedingung

(1) Left Join ( linker Join): Gibt alle Datensätze in der linken Tabelle und die Datensätze in der rechten Tabelle zurück, die die Join-Bedingungen erfüllen.

Wenn ein Datensatz in der linken Tabelle in der rechten Tabelle nicht vorhanden ist, wird er in der rechten Tabelle als leer angezeigt.

(2) Rechtsverknüpfung: Gibt alle Datensätze in der rechten Tabelle und Datensätze in der linken Tabelle zurück, die die Verknüpfungsbedingungen erfüllen.

4. Zusammengesetzte bedingte Join-Abfrage

4. Unterabfrage: Bezieht sich auf eine Abfrageanweisung, die in einer anderen A-Abfrage verschachtelt ist innerhalb einer Abfrageanweisung. Es kann in einer select-, select...into-Anweisung, insert...into-Anweisung und anderen Anweisungen verschachtelt werden. Beim Ausführen einer Abfrageanweisung werden zuerst die Anweisungen in der Unterabfrage ausgeführt und dann werden die zurückgegebenen Ergebnisse als Filterbedingungen für die äußere Abfrage verwendet. In der Unterabfrage können Sie normalerweise die Operatoren „in“, „exists“, „any“ und „all“ verwenden

(1) Unterabfrage mit dem Schlüsselwort „in“: Die innere Abfrageanweisung gibt nur eine Datenspalte zurück, und der Wert in dieser Datenspalte wird von der äußeren Abfrageanweisung für den Vergleichsvorgang verwendet.

Zum Beispiel: Fragen Sie die Abteilung ab, in der es Mitarbeiter gibt, deren Alter 20 Jahre beträgt.

(2) Unterabfrage mit dem Schlüsselwort „exists“: Der Parameter nach dem Schlüsselwort „exists“ kann eine beliebige Unterabfrage sein. Die Funktion dieser Unterabfrage entspricht einem Test. Es handelt sich nicht um beliebige Daten wird generiert und nur True oder False zurückgegeben. Wenn der Rückgabewert True ist, wird die äußere Abfrage ausgeführt.

Im folgenden Beispiel ist das Rückgabeergebnis der Unterabfrage True, sodass die äußere Abfrageanweisung ausgeführt wird, d. h. alle Abteilungsinformationen werden abgefragt. Es ist zu beachten, dass das Schlüsselwort „exists“ effizienter ist als das Schlüsselwort „in“. Daher wird in der tatsächlichen Entwicklung, insbesondere bei großen Datenmengen, die Verwendung des Schlüsselworts „exists“ empfohlen.

(3) Unterabfrage mit beliebigem Schlüsselwort: „any“ bedeutet, dass eine der Bedingungen erfüllt ist, was die Erstellung eines Ausdrucks zum Vergleich der Rückgabewertliste der Unterabfrage ermöglicht , Solange eine Vergleichsbedingung in der inneren Unterabfrage erfüllt ist, wird ein Ergebnis als äußere Abfragebedingung zurückgegeben.

(4) Unterabfrage mit dem Schlüsselwort „all“: Sie ähnelt jeder anderen Abfrage, außer dass die von der Unterabfrage mit dem Schlüsselwort „all“ zurückgegebenen Ergebnisse alle inneren Abfragebedingungen gleichzeitig erfüllen müssen .

(5) Unterabfrage mit Vergleichsoperator

Dieser Artikel erklärt den Mehrtabellenbetrieb der MySQL-Datenbank und Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

$-Selektor – So kapseln Sie DOM in JQuery-Objekte

Native JS-Komponentisierung Entwickeln Sie ein einfaches Karusselldiagramm Beispielcode

css3 animierte Navigationsleiste 3D

Das obige ist der detaillierte Inhalt vonMehrtabellenbetrieb der MySQL-Datenbank. 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