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.
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`);
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;

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

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

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`;
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?