Mam następującą tabelę:
CREATE TABLE child(
id INTEGER PRIMARY KEY,
parent_id INTEGER,
description TEXT);
Jak dodać ograniczenie klucza obcego na parent_id
? Załóżmy, że klucze obce są włączone.
Większość przykładów zakłada, że tworzysz tabelę - chciałbym dodać ograniczenie do istniejącego.
sql
sqlite
foreign-keys
ddl
Dane O'Connor
źródło
źródło
Odpowiedzi:
Nie możesz.
Chociaż składnia SQL-92 dodawania klucza obcego do tabeli byłaby następująca:
SQLite nie obsługuje ten
ADD CONSTRAINT
wariantALTER TABLE
komendy ( sqlite.org: SQL, SQLite nie implementuje ).Dlatego jedynym sposobem dodania klucza obcego w sqlite 3.6.1 jest
CREATE TABLE
następujący sposób:Niestety będziesz musiał zapisać istniejące dane w tabeli tymczasowej, usunąć starą tabelę, utworzyć nową tabelę z ograniczeniem FK, a następnie skopiować dane z powrotem z tabeli tymczasowej. ( sqlite.org - często zadawane pytania: Q11 )
źródło
RENAME TO
jest to jeden z niewieluALTER TABLE
wariantów, który jest obecnie obsługiwany w sqlite 3.Możesz dodać ograniczenie, jeśli zmienisz tabelę i dodasz kolumnę, która używa ograniczenia.
Najpierw utwórz tabelę bez parent_id:
Następnie zmień tabelę:
źródło
Proszę sprawdzić https://www.sqlite.org/lang_altertable.html#otheralter
źródło
Tak, możesz, bez dodawania nowej kolumny. Musisz uważać, aby zrobić to poprawnie, aby uniknąć uszkodzenia bazy danych, dlatego przed wypróbowaniem należy wykonać pełną kopię zapasową bazy danych.
dla twojego konkretnego przykładu:
lub bardziej ogólnie:
Tak czy inaczej, prawdopodobnie będziesz chciał najpierw zobaczyć, jaka jest definicja SQL, zanim wprowadzisz jakiekolwiek zmiany:
Jeśli używasz metody replace (), przed wykonaniem może okazać się pomocne, aby najpierw przetestować polecenie replace (), uruchamiając:
źródło
Jeśli używasz menedżera dodatku Firefox do programu sqlite-manager, możesz wykonać następujące czynności:
Zamiast upuszczać i ponownie tworzyć tabelę, można ją po prostu zmodyfikować w ten sposób.
W polu tekstowym Kolumny kliknij prawym przyciskiem myszy ostatnią wymienioną nazwę kolumny, aby wyświetlić menu kontekstowe, i wybierz opcję Edytuj kolumnę. Zwróć uwagę, że jeśli ostatnia kolumna w definicji TABELI jest KLUCZEM PODSTAWOWYM, wówczas konieczne będzie najpierw dodanie nowej kolumny, a następnie edycja typu nowej kolumny w celu dodania definicji KLUCZA OBCEGO. W polu Typ kolumny dołącz przecinek i rozszerzenie
definicja po typie danych. Kliknij przycisk Zmień, a następnie kliknij przycisk Tak w oknie dialogowym Niebezpieczna operacja.
Odniesienie: Sqlite Manager
źródło
Możesz spróbować tego:
źródło
Zasadniczo nie możesz, ale możesz ominąć tę sytuację.
Prawidłowym sposobem dodania ograniczenia klucza obcego do istniejącej tabeli jest następujące polecenie.
Następnie skopiuj dane Parent_Id do nowej Kolumny, a następnie usuń kolumnę Parent_Id . Dlatego nie ma potrzeby stosowania tabeli tymczasowej.
źródło
Najpierw dodaj kolumnę w tabeli podrzędnej,
Cid
jakint
wtedyalter table
z kodem poniżej. W ten sposób możesz dodać klucz obcyCid
jako klucz podstawowy tabeli nadrzędnej i używać go jako klucza obcego w tabeli podrzędnej ... mam nadzieję, że to ci pomoże, ponieważ jest dla mnie dobre:źródło