MySQL/InnoDB: Grund für den Spaltenindex in der Tabelle beim Hinzufügen (und Löschen) einer FK-Einschränkung [Duplikat]MySql

MySQL DBMS-Forum
Guest
 MySQL/InnoDB: Grund für den Spaltenindex in der Tabelle beim Hinzufügen (und Löschen) einer FK-Einschränkung [Duplikat]

Post by Guest »

Beim Erstellen einer einfachen Fremdschlüsseleinschränkung (FK) zwischen zwei Tabellen wird manchmal ein Index mit dem Namen der erstellten Einschränkung für die Tabelle generiert.
Kann mir jemand etwas Einblick geben? Was macht dieser Index eigentlich technisch und unter welchen Bedingungen wird er erstellt? Denn anscheinend
  • es kann gelöscht werden, ohne dass sich dies auf die aktive Einschränkung auswirkt.
  • es bleibt auch nach dem Löschen in der Tabelle Einschränkung.
Beispiel: Gegeben sind zwei Tabellen:

Code: Select all

CREATE TABLE `customers` (
`customerId` int(10) UNSIGNED NOT NULL,
`customerName` varchar(255) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
ALTER TABLE `customers` ADD PRIMARY KEY (`customerId`);

CREATE TABLE `orders` (
`orderId` int(10) UNSIGNED NOT NULL,
`orderCustomerId` int(10) UNSIGNED NOT NULL,
`orderName` varchar(255) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
ALTER TABLE `orders` ADD PRIMARY KEY (`orderId`);
Hinzufügen der folgenden Einschränkung:

Code: Select all

ALTER TABLE `orders`
ADD CONSTRAINT `orders.orderCustomerId__customers.customerId_FK` FOREIGN KEY (`orderCustomerId`) REFERENCES `customers` (`customerId`) ON DELETE RESTRICT ON UPDATE RESTRICT;
Erstellt eine aktive Einschränkung korrekt, wie sie in der Beziehungsansicht dieser Tabelle in phpMyAdmin angezeigt wird:
Image

und es ist auch im Einschränkungskatalog von INFORMATION_SCHEMA.TABLE_CONSTRAINTS aufgeführt:
Image

Der betreffende Index liegt auf dem Tisch selbst, indiziert die Spalte mit der Einschränkung und verwendet denselben Namen wie die erstellte Einschränkung:
Image

Dieser Index kann gelöscht werden, ohne dass dies Auswirkungen auf das Vorhandensein oder die Funktionsweise der Einschränkung hat. Es scheint also keine eigene Funktionalität zu haben.
Aufhebung der Einschränkung

Code: Select all

ALTER TABLE `orders` DROP FOREIGN KEY `orders.orderCustomerId__customers.customerId_FK`;
lässt den Tabellenindex nachgestellt, was möglicherweise darauf hindeutet, dass eine aktive FK-Einschränkung vorliegt, obwohl dies nicht der Fall ist.
Hinweis: Betreff -Das Hinzufügen der Einschränkung mit dem vorherigen Namen funktioniert einwandfrei und führt zu keiner Kollision oder einem Duplikat des Index.
Irgendwelche Erkenntnisse darüber, warum ADD CONSTRAINT dies tut?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post