Heim  >  Artikel  >  Datenbank  >  So implementieren Sie die MySQL-Fremdschlüsselkaskade

So implementieren Sie die MySQL-Fremdschlüsselkaskade

WBOY
WBOYnach vorne
2023-05-29 21:49:451415Durchsuche

Einführung

MySQL-Fremdschlüssel spielen eine einschränkende Rolle und stellen die Datenintegrität auf Datenbankebene sicher.
Zum Beispiel wird bei Verwendung des Fremdschlüsseltyps CASCADE (Kaskadenverkettung) eine untergeordnete Tabelle (z. B. user_info) mit einer übergeordneten Tabelle (z. B. user) verknüpft und die übergeordnete Tabelle aktualisiert oder gelöscht Die untergeordnete Tabelle aktualisiert oder löscht Datensätze. Dieser Vorgang wird auf Datenbankebene abgeschlossen.
In frühen Unternehmenssystemen gibt es viele Datenbankdesigns. Obwohl sie Programmierern dabei helfen, Lösch- und Aktualisierungsvorgänge einzusparen, erhöhen sie tatsächlich versteckte Regeln, erhöhen die Komplexität der Software und schwächen die Leistung.

Also sollten wir beim Anwendungsdesign unser Bestes geben, um die Datenintegrität auf der Anwendungsebene (z. B. durch die Verwendung von Transaktionsverarbeitungsmechanismen) und nicht auf Datenbankebene sicherzustellen.

Das Folgende ist eine Einführung in die Fremdschlüssel von MySQL.

Die Speicher-Engine, die Fremdschlüssel in MySQL unterstützt, ist nur InnoDB Beim Erstellen eines Fremdschlüssels muss die übergeordnete Tabelle einen entsprechenden haben #🎜 🎜#index, subtable erstellt beim Erstellen von Fremdschlüssel automatisch auch den entsprechenden Index.

Beim Erstellen eines Index können Sie beim Löschen oder Aktualisieren der übergeordneten Tabelle die entsprechenden Vorgänge für die untergeordnete Tabelle angeben, einschließlich

  • RESTRICT ( Einschränkung einschränken)

  • KEINE AKTION

  • SET NULL

    # 🎜🎜 #
  • CASCADE (Verkettung)
  • RESTRICT ist dasselbe wie NO ACTION, was sich auf den zugehörigen Datensatz
im

-Sub bezieht -table In diesem Fall kann übergeordnete Tabelle nicht aktualisiert werden Oder löschen Sie den entsprechenden Datensatz der untergeordneten Tabelle ; SET NULL bedeutet, dass das entsprechende Feld der untergeordneten Tabelle SET NULL ist, wenn die übergeordnete Tabelle aktualisiert oder gelöscht wird.
BeispielDa nur die InnoDB-Engine die Verwendung von Fremdschlüsseln zulässt, muss unsere Datentabelle die InnoDB-Engine verwenden. Datenbank erstellen:

Create database test;

1. Erstellen Sie zunächst zwei Tabellen stu, sc

create table stu(
sid int UNSIGNED primary key auto_increment,
name varchar(20) not null)
TYPE=InnoDB charset=utf8;

create table sc(
scid int UNSIGNED primary key auto_increment,
sid int UNSIGNED not null,
score varchar(20) default '0',
index (sid),   --外键必须加索引
FOREIGN KEY (sid) REFERENCES stu(sid) ON DELETE CASCADE ON UPDATE CASCADE)
TYPE=InnoDB charset=utf8;

–Hinweis: Fremdschlüssel müssen indiziert werden;# 🎜 🎜#

FOREIGN key(sid) Legen Sie den Fremdschlüssel fest und legen Sie sid als Fremdschlüssel fest.

REFERENCES stu(sid) Referenzfunktion. Verweisen Sie auf die SID in der Stu-Tabelle. 🎜🎜#

Hinweis: Wenn beim Einfügen von Daten in die sc-Tabelle die eingefügte SID 22 ist, schlägt das Einfügen fehl und verstößt gegen die Fremdschlüsseleinschränkung, da die Fremdschlüssel-Sid#🎜 🎜#Der Primärschlüssel aus der ID in der Stu-Tabelle, d. h. die ID in Stu hat keine Daten gleich 22.

Kaskadenlöschung: Löschen Sie den Schüler mit der ID 2 in der stu-Tabelle, und die Noten des Schülers in der sc-Tabelle werden ebenfalls kaskadiert gelöscht

insert into stu (name) value ('zxf');
insert into stu (name) value ('ls');
insert into stu (name) value ('zs');
insert into stu (name) value ('ww');

insert into sc(sid,score) values ('1','98');
insert into sc(sid,score) values ('1','98');
insert into sc(sid,score) values ('2','34');
insert into sc(sid,score) values ('2','98');
insert into sc(sid,score) values ('2','98');
insert into sc(sid,score) values ('3','56');
insert into sc(sid,score) values ('4','78');
insert into sc(sid,score) values ('4','98');

# 🎜 🎜#

Kaskadierende Aktualisierung: Der Schüler mit der ID 3 in der stu-Tabelle wird in die ID 6 geändert, und die entsprechende ID des Schülers in der sc-Tabelle wird auch in der Kaskade aktualisiert

delete from stu where sid = '2';

#🎜 🎜#

Hinweis

Beim Löschen einer Tabelle müssen Sie zuerst die Fremdschlüsseltabelle (sc) und dann die Primärschlüsseltabelle (stu) löschen #🎜 🎜#

#🎜 🎜#So implementieren Sie die MySQL-Fremdschlüsselkaskade

Das obige Bild zeigt einen Verstoß gegen Fremdschlüsselbeschränkungen und kann nicht gelöscht werden


#🎜 🎜#Das obige Bild zeigt das normale Löschen. Löschen Sie zuerst die sc-Tabelle und dann die stu-Tabelle!

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die MySQL-Fremdschlüsselkaskade. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen