Chcę usunąć ograniczenia z mojej tabeli. Moje zapytanie to:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
Ale dostałem błąd:
#1064
- Wystąpił błąd w składni SQL; sprawdź w instrukcji, która odpowiada wersji serwera MySQL, czy jest poprawna składnia do użycia w pobliżu „ograniczeniaFK_tbl_magazine_issue_mst_users
” w wierszu 1
mysql
foreign-keys
constraints
alter
deepu sankar
źródło
źródło
CHECK
ograniczenie, nie trzeba go usuwać, ponieważ nie powstaje żadne rzeczywiste ograniczenie. Możesz wybrać opcjęinformation_schema.table_constraints
do weryfikacji, a nawet bez przerwy uruchamiać odadd constraint
nowa. MySQL nie obsługujeCHECK
ograniczeń, ale pozwala SQLowi na ich utworzenie (bez faktycznego tworzenia ograniczeń).Odpowiedzi:
Mysql ma specjalną składnię do usuwania ograniczeń klucza obcego:
źródło
alter table .. drop constraint
. Wygląda na to, że MySQL jest dziwny.Miałem ten sam problem i udało mi się rozwiązać za pomocą tego kodu:
źródło
ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
Nie ma czegoś takiego jak
DROP CONSTRAINT
w MySQL. W twoim przypadku możesz użyćDROP FOREIGN KEY
zamiast tego.źródło
Jeśli ograniczenie nie jest kluczem obcym, np. jeden dodany przy użyciu „UNIKALNEGO OGRANICZENIA (colA, colB)”, to jest to indeks, który można usunąć za pomocą
ALTER TABLE ... DROP INDEX ...
źródło
Również fajnie, możesz tymczasowo wyłączyć wszystkie kontrole kluczy obcych z bazy danych mysql:
SET FOREIGN_KEY_CHECKS=0;
I aby włączyć to ponownie:SET FOREIGN_KEY_CHECKS=1;
źródło
Aby dodać trochę do odpowiedzi Roberta Knighta, ponieważ sam tytuł postu nie wspomina o kluczach obcych (a ponieważ jego nie ma pełnych próbek kodu i ponieważ bloki kodu komentarza SO nie pokazują się tak dobrze jak kod odpowiedzi bloki), dodam to dla unikalnych ograniczeń. Każda z tych czynności powoduje usunięcie ograniczenia:
lub
źródło
Niektóre ORM lub frameworki używają innej konwencji nazewnictwa dla kluczy obcych niż domyślna
FK_[parent table]_[referenced table]_[referencing field]
, ponieważ można je zmienić.Na przykład Laravel używa
[parent table]_[referencing field]_foreign
jako konwencji nazewnictwa. Możesz wyświetlić nazwy kluczy obcych za pomocą tego zapytania, jak pokazano tutaj :Następnie usuń klucz obcy, uruchamiając wcześniej wspomniane zapytanie DROP FOREIGN KEY i jego prawidłową nazwę.
źródło
Dla tych, którzy przychodzą tutaj za pomocą MariaDB:
Zauważ, że MariaDB zezwala ogólnie na DROP CONSTRAINT, na przykład na usuwanie ograniczeń sprawdzania:
https://mariadb.com/kb/en/library/alter-table/
źródło
CONSTRAINT CHECK(a > b)
. W przypadku ograniczeń klucza obcego wydaje się, że nadal potrzebujeszDROP FOREIGN KEY
składni, przynajmniej w wersji Maria.2D 10.2źródło
Nie ma w
DROP CONSTRAINT
MySql. To działa jak magia w mysql 5.7źródło
Najprostszym sposobem na usunięcie ograniczenia jest użycie składni
ALTER TABLE tbl_name DROP CONSTRAINT symbol;
wprowadzonej w MySQL 8.0.19 :db <> demo skrzypiec
źródło
zadziała to na MySQL, aby usunąć ograniczenia
źródło
DROP PRIMARY KEY
nie powinno działać.DROP FOREIGN KEY
działa, ale musisz określić, komudrop
. Na przykładALTER TABLE tablename DROP FOREIGN KEY id_name_fk