Mysql
 sql >> Datenbank >  >> RDS >> Mysql

INNODB-Kaskade beim Löschen und Aktualisieren

Du scheinst nur eine kleine Anleitung zu wollen. Also versuche ich mich kurz zu fassen.

$sql = "CREATE TABLE customerGroups (
   customer_id int(11) NOT NULL,
   group_id int(11) NOT NULL,
   PRIMARY KEY (customer_id, group_id),
   CONSTRAINT customers_customergroups_fk
     FOREIGN KEY (customer_id)
     REFERENCES customers (customer_id) 
     ON DELETE CASCADE,
   CONSTRAINT groups_customergroups_fk
     FOREIGN KEY (group_id)
     REFERENCES groups (group_id) 
     ON DELETE CASCADE
)ENGINE = INNODB;";

Sie brauchen nur ID-Nummern, wenn die Identität schwer festzumachen ist. Wenn Sie mit Menschen zu tun haben, ist Identität schwer festzunageln. Es gibt viele Leute mit dem Namen "John Smith".

Aber Sie haben es mit zwei Dingen zu tun, die bereits identifiziert wurden. (Und ausgerechnet mit ID-Nummern identifiziert.)

Kaskadierende Löschungen sind sinnvoll. Es kommt relativ selten vor, dass Aktualisierungen von ID-Nummern kaskadiert werden. Es wird angenommen, dass sie sich nie ändern. (Der Hauptgrund, warum Oracle DBAs darauf bestehen, dass Primärschlüssel immer müssen ID-Nummern sein und niemals dürfen Änderung liegt daran, dass Oracle nicht kann Kaskadenaktualisierungen.) Wenn später einige ID-Nummern benötigt werden aus welchem ​​Grund auch immer ändern möchten, können Sie die Tabelle so ändern, dass sie ON UPDATE CASCADE.

enthält
$sql = "CREATE TABLE groups
(
group_id int(11) NOT NULL AUTO_INCREMENT,
group_title varchar(50) NOT NULL UNIQUE,
group_desc varchar(140),
PRIMARY KEY (group_id)
)ENGINE = INNODB;";

Beachten Sie die zusätzliche Eindeutigkeitsbeschränkung für group_title. Sie möchten so etwas (unten) nicht in Ihrer Datenbank zulassen.

group_id  group_title
--
1         First group
2         First group
3         First group
...
9384      First group

Sie werden diese Art von Änderungen durch alle Ihre Tabellen tragen wollen. (Außer vielleicht Ihre Kundentabelle.)