IF EXISTS(
SELECT *
FROM INFORMATION_SCHEMA.STATISTICS
WHERE INDEX_SCHEMA = DATABASE()
AND TABLE_NAME='myTable'
AND INDEX_NAME = 'myIndex')
THEN
ALTER TABLE `myTable` DROP FOREIGN KEY `myForeignKey`;
ALTER TABLE `myTable` DROP INDEX `myIndex` ;
END IF;
Po utworzeniu klucza obcego, mysql automatycznie utworzyć indeks na kolumnie odwołania. Powyższy przykład pokazuje, jak sprawdzić indeks w INFORMATION_SCHEMA, ale jest znacznie więcej informacji do sprawdzenia w information schema. Twoja nazwa indeksu wskazuje, że została utworzona dla FK, więc najpierw musisz najpierw usunąć FK, a następnie upuścić indeks. Jeśli utworzysz ponownie klucz obcy, mysql utworzy indeks ponownie. Potrzebuje indeksu, aby wymusić integralność referencyjną bez konieczności skanowania tabeli.
Jeśli Twoim zamiarem było utworzenie nowego indeksu zawierającego tę samą kolumnę, musisz najpierw utworzyć ten indeks (z tą kolumną, która będzie używana jako FK, jako pierwsza na liście kolumny określone dla indeksu). Teraz możesz dodać swoją kopię FK i mysql z przyjemnością użyje nowego indeksu bez tworzenia kolejnego.
Edycja: do szybkiego wyświetlania indeksów po prostu wykonuj POKAŻ INDEKSY z myTable;
używam MySQL, starałem się umieścić to IF EXISTS, gdzie tylko mogłem. Jak sprawdzić, czy klucz obcy istnieje, zanim go zrzucisz? – Creditto
Który silnik pamięci masowej mysql jest używany? MYISAM lub INNODB ?? Jesteś pewien, że nie używasz MYISAM? –
AM przy użyciu silnika magazynowania INNODB w mysql, próbowałem umieścić to IF EXISTS gdziekolwiek mogłem. Jak sprawdzić, czy klucz obcy istnieje, zanim go zrzucisz? – Creditto