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-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;
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;
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';
#🎜 🎜#
#🎜 🎜#
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!