MySQL Kaskaden-Löschen
In der MySQL-Sprache bezieht sich die Einschränkung auf den Satz von Regeln, die für die Tabelle erzwungen werden, um einige Anomalien zu vermeiden.
Diese Anomalien führen zu fehlerhaften Einträgen in der Tabelle. Die Beschränkungen können auf der Grundlage des Fehlerverhaltens von verschiedener Art sein.
Diese sind referenzielle Integrität, Entitätsbeschränkung und semantische Beschränkung. Diese haben Bedeutung und Verwendung basierend auf der Art des Fehlers und wie inkonsistentes Verhalten vermieden werden kann.
Lassen Sie uns kurz verstehen, welche Art von Beschränkungen vorhanden sind.
-
Entitätseinschränkung ist eine Einschränkung, die für in der Tabelle vorhandene Entitäten und Attribute gilt.
Es behält die Konsistenz innerhalb der Werte bei, die in einer Spalte einer Tabelle dargestellt werden. Es wird oft als First-Level-Validierung bezeichnet, bei der die Integrität der Säule aufrechterhalten wird.
Beispiel:
create table student (stu_id int primary key, stu_name varchar2(50), stu_dept varchar2(15)); Insert into student values(111, 'ABC', 'Chemical');
Der
primary key
ist die Entitätsintegritätsbeschränkung, die intern bedeutet, dass die Spaltestu_id
ein eindeutiger und ungleich Nullwert ist. In der Spaltestu_id
ist keine Duplizität erlaubt, und ein Nicht-Null-Wert ist nicht erlaubt. -
Die semantische Einschränkung wird über eine Spalte erzwungen, um ähnliche Datentypwerte anzuzeigen, die in der Tabelle vorhanden sind. Es wird im Allgemeinen über eine Spalte erzwungen, um die Werte konsistent zu machen und von einem bestimmten Typ zu bleiben.
Beispiel:
Stu_name varchar2(50);
Im obigen Beispiel ist
varchar2
der Datentyp mit der Kapazität von 50 Bytes, der den Studentennamen enthält.Die Spalte enthält nur Werte vom Zeichentyp, und es sind keine doppelten und ganzzahligen Werte zulässig. Es handelt sich also um eine Art semantische Einschränkung.
-
Die referenzielle Integrität ist die Einschränkung, die für andere Tabellen gilt, um Einschränkungen für Daten durchzusetzen. Die am häufigsten verwendete Einschränkung ist die Fremdschlüsseleinschränkung.
Bei einer Änderung in der übergeordneten Tabelle sollte die untergeordnete Tabelle mit der übergeordneten Tabelle konsistent bleiben. Wenn der Datensatz gelöscht werden soll, sollte die Referenz im untergeordneten Datensatz nicht hängen bleiben und ist eine Einschränkung der referenziellen Integrität.
Beispiel:
create table report_card (stu_roll_number int, stu_marks int, stu_course varchar2(30) references student);
Im obigen Beispiel zeigt ein Zeugnis die Abteilung oder den Kurs des Studenten aus der übergeordneten Tabelle
student
. Wenn die Einschränkung der referenziellen Integrität angewendet wird, wirken sich Manipulationen in einer Tabelle auf die Arbeit in untergeordneten Tabellen aus.
Unter der Einschränkung der referenziellen Integrität ist on delete cascade
eine Einschränkung der referenziellen Integrität, die untergeordnete Datensätze automatisch löscht, wenn der übergeordnete Datensatz gelöscht wird. Es ist eine Antwort auf die vom Fremdschlüssel entnommene Referenzaktion.
Beispiel:
CREATE TABLE Student (stu_id int(10) NOT NULL, name varchar(10) NOT NULL, birthdate date NOT NULL, PRIMARY KEY (stu_id));
Die obige Abfrage erstellt eine Tabelle Student mit Attributen oder Spalten als Studenten-ID mit dem Typ int
und dem Primärschlüssel als Entitätsbeschränkung für die Spalte. Andere Wertattribute sind Name und Geburtstag mit varchar
und date
als Datentypen.
CREATE TABLE Department (dept_id int(20) PRIMARY KEY NOT NULL,stu_id int(10) NOT NULL, dept_name varchar(20) NOT NULL, FOREIGN KEY (stu_id) REFERENCES Student (stu_id) ON DELETE CASCADE);
Hier wird die obige Abfrage, eine Abteilungstabelle mit Attributen wie ID, Abteilungsname und Studenten-ID gebildet. Außerdem fungiert die Studenten-ID als Referenz oder Fremdschlüssel aus der übergeordneten Tabelle.
Hier sagt die Einschränkung on delete cascade
, dass bei einer Löschung in der Studenten-ID auch der Eintrag aus der Abteilungstabelle gelöscht wird. Daher gibt es nach dem Löschen keinen Eintrag mehr, der dem Studenten in einer Abteilung entspricht.
Lassen Sie uns die Datensätze in die Tabellen einfügen und sehen, wie die Manipulation hier funktioniert.
Fügen Sie zuerst die Datensätze in die Tabelle Student
ein.
INSERT INTO Student (stu_id, name, birthdate) VALUES
(101, 'John', '1995-11-12'),
(102, 'Jian', '1983-07-19'),
(103, 'Jackey', '1965-10-23');
Die obige Abfrage fügt drei Datensätze in die Tabelle Student
ein.
Einfügen der Datensätze in die Tabelle Abteilung
.
INSERT INTO Department (dept_id, stu_id, dept_name) VALUES
(301, 101, 'Physics'),
(302, 101, 'Science'),
(303, 102, 'Maths');
Die obige Abfrage fügt drei Abteilungen für die jeweiligen Studenten-IDs in die Tabelle department
ein.
Lassen Sie uns nun einen Datensatz in der übergeordneten Tabelle entfernen.
DELETE FROM Student WHERE stu_id = 102;
Das Endergebnis entfernt den dritten Datensatz aus der Tabellenabteilung, da die Referenz aus der übergeordneten Tabelle entfernt wird, wodurch der dritte Datensatz frei wird.
Daher reduziert es den dritten Datensatz mit der Eigenschaft on delete cascade
. Diese Eigenschaft ist eine Einschränkungseigenschaft für die referenzielle Integrität, die Datensätze in der untergeordneten Tabelle entfernt, wenn die übergeordnete Tabelle betroffen ist.
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn