MySQL führt ACID-Transaktionen und referentielle Integrität durch

Jede Anwendung, die eine Datenbank enthält, muss die ACID-Merkmale erfüllen, in den Anwendungen und professionellen Datenbankmanagern bezieht sich das ACID-Konzept auf die Merkmale oder Eigenschaften, die garantieren, dass die Transaktionen in den Datenbanken sicher und konfigurierbar ausgeführt werden. Konkret steht ACID für Atomicity, Consistency, Isolation und Durability.

Eine Transaktion innerhalb einer Datenbank ist beispielsweise das Einfügen eines Datensatzes oder, wenn wir es als Geschäftsmodell sehen, Neukunden hinzufügen, Produkt ändern. Transaktionen erzeugen immer eine Änderung, Einfügen, Modifizieren, Löschen, eine Abfrage ist keine Transaktion, da sie keine Änderungen erzeugt.
Angeben von ACID-Eigenschaften

Atomarität


Es ist die Eigenschaft, die garantiert und überprüft, ob die Transaktion ausgeführt wurde oder nicht, und diese Eigenschaft zeigt an, dass eine Operation abgebrochen wird, wenn sie nicht abgeschlossen ist, zum Beispiel angenommen, wir fügen einen Datensatz ein und der Server stürzt ab, ein Datensatz in der Mitte aufgezeichnet wird, wird diese Aufzeichnung aufgrund der Atomarität nicht aufgezeichnet.
Ein anderes Beispiel, wenn eine Online-Zahlung durchgeführt wird und der Betrag von unserem Konto abgebucht wird, die Zahlung jedoch fehlschlägt oder das System abstürzt, dann wird die Transaktion abgebrochen und die Datenbank zeichnet sie nicht auf.

Konsistenz


Es ist die Eigenschaft, die garantiert, dass Transaktionen ausgeführt werden, die ohne Probleme abgeschlossen werden können. Dieses Konzept hat mit der Integrität der Datenbank zu tun. Es verhindert, dass die Daten verändert werden und ihre Bedeutung verlieren oder ohne Bezug sind, beispielsweise kann ein Kunde nicht gelöscht werden, während er zu einem bestimmten Zeitpunkt einen Kauf getätigt hat. Wenn Sie den Kunden löschen möchten, müssen Sie zunächst alle Rechnungen und Daten zu diesem Kunden löschen.

Isolation


Es ist die Eigenschaft, die garantiert, dass bei zwei oder mehr Transaktionen gleichzeitig diese nacheinander und bei paralleler Ausführung unabhängig voneinander ausgeführt werden, um mögliche Fehler zu vermeiden.

Haltbarkeit


Es ist das Eigentum, das dafür verantwortlich ist, dass eine Transaktion durchgeführt wurde, und die durch die Transaktion vorgenommenen Änderungen sind dauerhaft, auch im Falle von Problemen wie Strommangel oder Systemausfällen.
MySQL unterstützt das InnoDB-Format, eine Form der Datenspeicherung für MySQL, die als Standardtabellenformat in allen MySQL-Distributionen enthalten ist. Dieses Format unterstützt Transaktionen vom Typ ACID und referenzielle Integrität.
Wir werden einige Beispiele für die ACID-Implementierung mit Mysql machen, die Abfragen können dann in jeder Programmiersprache implementiert werden. In dieser Datenbank verfügt jeder Benutzer über eine bestimmte Stufe von Berechtigungen und Aktionen, die er im System des Unternehmens ausführen kann. Wir werden uns nur auf diese Funktionalität konzentrieren.
Wir beginnen mit der Erstellung einer Datenbank UnternehmenDB von phpmyadmin, dann erstellen wir eine Benutzertabelle und wählen die InnoDB-Speicher-Engine aus.

 - Tabellenstruktur für Tabelle `users` CREATE TABLE IF NOT EXISTS` users` (`userid` int (10) NOT NULL,` name` varchar (150) DEFAULT NULL) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;
Wir fügen der Benutzertabelle einige Daten hinzu
 INSERT INTO `users` (` userid`, `name`) VALUES (1, 'Carlos Alberte'), (2, 'Pablo Callejos'), (3, 'Ana Bolena');
In diesem Fall erstellen wir den Primärschlüssel der Benutzertabelle, der die Benutzer-ID lautet
 - Indizes der Tabelle `users` ALTER TABLE` users` ADD PRIMARY KEY (`userid`);
Als nächstes erstellen wir die Level-Tabelle
 - Tabellenstruktur für Tabelle `levels` CREATE TABLE IF NOT EXISTS`levels` (`levelid` int (11) NOT NULL,` level` varchar (50) DEFAULT NULL) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;
Wir fügen der Leveltabelle einige Daten hinzu
 INSERT INTO `levels` (`levelid`, `level`) VALUES (1, 'Basic'), (2, 'Intermediate'), (3, 'Advanced');
Wir erstellen dann die Berechtigungstabelle, in der wir die Berechtigungsstufe jedes Benutzers angeben
 - Tabellenstruktur für Tabelle `privileges` CREATE TABLE IF NOT EXISTS` Privileges` (`idprivilege` int (11) NOT NULL,` idlevel` int (11) NOT NULL DEFAULT '0', `idusuario` int (11 ) NOT NULL ) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;
Wir fügen der Privilegientabelle einige Daten hinzu
 INSERT INTO `privileges` (`privilegid`, `levelid`,` userid`) VALUES (1, 1, 1), (2, 2, 3), (3, 1, 2);
Wir fügen dann die Beziehungen aus dem SQL-Editor hinzu, ich weise einen Fremdschlüssel zu, der die Privilegien- und Benutzertabelle über die Benutzer-ID in Beziehung setzt, und den Fremdschlüssel, der die Privilegien mit den Ebenen über die Ebenen-ID verknüpft.
 - Filter für die Tabelle `privileges` ALTER TABLE` Privileges` ADD CONSTRAINT `levellfk` FOREIGN KEY (` levelid`) REFERENCES `levels` (` levelid`), ADD CONSTRAINT `privilegesfk` FOREIGN KEY (` userid`) REFERENCES ` users ` (`Benutzer-ID`);
Als nächstes konsultieren wir die Datenbank, um zu sehen, ob die Daten korrekt sind
 SELECT user.name, level.level FROM Benutzer, Ebenen, Privilegien WHERE Privilegien.idlevel = Stufen.levelid ANDusers.userid = Privilegien.userid

Sehen wir uns an, wie es funktioniert. Als nächstes versuchen wir, die Berechtigungen für einen Benutzer und eine Ebene einzufügen, die nicht vorhanden sind.
Die Anweisung besteht aus den folgenden INSERT INTO-Privilegien VALUES (privilegeid, userid, levelid); Daher
 INSERT INTO-Privilegien VALUES (6, 8,10);

Dies führt zu einem Fehler, da der Fremdschlüssel der Benutzer-ID in der Berechtigungstabelle eine Inkonsistenz erzeugen würde, wenn wir einen Benutzer hinzufügen, der nicht in der Benutzertabelle vorhanden ist. Hier vermeiden wir den Fehler mit dem Format MySam die Daten wären ohne Probleme gespeichert worden.
Als nächstes werden wir versuchen, einen Benutzer aus der Benutzertabelle zu löschen:
 DELETE FROM `users` WHERE userid = 3
Bei der Ausführung der SQL-Anweisung gibt es einen Fehler, da der Client nicht gelöscht werden kann, da er Daten in anderen Tabellen hat. In diesem Fall befindet sich der Client mit der ID 3 in der Privilegientabelle. Wenn wir ihn löschen möchten, müssen wir ihn zuerst entfernen aus allen Tabellen und nach der Kundentabelle.

Um diese Art von Datensätzen mit Fremdschlüsseln zu löschen, wird der Name delete verwendet in WASSERFALL, in dem alle Datensätze zu einer bestimmten Abfrage in allen Tabellen gelöscht werden, in denen sie Fremdschlüsselbeziehungen haben. Zur Durchführung dieser Transaktion verwenden wir die Funktion AUF KASKADE LÖSCHEN.
Als erstes müssen Sie die Erlaubnis zum Löschen in Kaskade erteilen. Denken Sie daran, dass beim Starten standardmäßig der Referenztyp ist BESCHRÄNKEN Dies bedeutet, dass die Daten in diesem Feld der Tabelle nicht aktualisiert oder gelöscht werden können. Aus Sicherheitsgründen kann jeder ausgeführte Satz keine Transaktion ausführen, daher ändern wir die Änderungs- und Löschberechtigungen.
 ALTER TABLE `privileges` ADD CONSTRAINT`privilegienfk` FOREIGN KEY (`userid`) REFERENCES` users` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE;
Wir führen die SQL-Abfrage erneut durch
 DELETE FROM `users` WHERE userid = 3
Dann können wir die SQL-Abfrage ausführen, um zu überprüfen, ob sie in keiner Tabelle mehr enthalten ist:
 WÄHLE user.name, level.level FROM Benutzer, Stufen, Privilegien WHERE Privileges.idlevel = Stufen.idlevel AND users.userid = Privilegien.userid

Benutzer 3 wurde aus der Tabelle "Benutzer" und aus der Tabelle "Privilegien" entfernt, da die Benutzer-ID dort einen Fremdschlüssel hatte.
Dies gilt auch für Updates beim Ändern. Es kann kaskadiert werden, um die referenzielle Integrität in Mysql und die Beziehung zwischen Tabellen aufrechtzuerhalten.
Mal sehen, was passiert, wenn wir in der Ketteneinfügung falsche Daten hinzufügen, zum Beispiel einen Benutzer hinzufügen, aber wenn wir eine Berechtigung hinzufügen, erhalten wir die falsche ID
 INSERT IN TO users VALUES (5, 'Julia Montaña'); INSERT INTO-Privilegien (`privilegeid`,`levelid`, `userid`) VALUES (6, 2, 6);
In diesem Fall wird der Benutzer gespeichert, jedoch nicht seine Berechtigungen, da die ID 6 in der Benutzertabelle nicht vorhanden ist.Hat dir dieses Tutorial gefallen und geholfen?Sie können den Autor belohnen, indem Sie diesen Knopf drücken, um ihm einen positiven Punkt zu geben

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave