Mam poniższej tabeli:Jak DROP ograniczenie z tabeli sqlite (3.6.21)?
CREATE TABLE child(
id INTEGER PRIMARY KEY,
parent_id INTEGER CONSTRAINT parent_id REFERENCES parent(id),
description TEXT);
Jak mogę upuścić ograniczenie?
Mam poniższej tabeli:Jak DROP ograniczenie z tabeli sqlite (3.6.21)?
CREATE TABLE child(
id INTEGER PRIMARY KEY,
parent_id INTEGER CONSTRAINT parent_id REFERENCES parent(id),
description TEXT);
Jak mogę upuścić ograniczenie?
SQLite nie obsługuje polecenia alter table drop constraint
. Będziesz musiał utworzyć nową tabelę bez ograniczenia, przenieść dane, a następnie usunąć starą tabelę.
Myślę, że coś jak poniżej powinno działać:
CREATE TABLE child2 (
id INTEGER PRIMARY KEY,
parent_id INTEGER,
description TEXT
);
INSERT INTO child2 (id, parent_id, description)
SELECT id, parent_id, description FROM CHILD;
DROP TABLE child;
ALTER TABLE child2 RENAME TO child;
Można również pominąć parent_id ze wszystkich powyższych stwierdzeń, jeśli nie chcesz go przeniesiono.
Smutna buzia. Tak właśnie myślałem. Miałem nadzieję, że nie zrozumiałem "nie zatwierdzonego" dokumentu. –
Możesz także połączyć kroki 1 i 2 powyżej w jedno wyrażenie sqink metinks: "utwórz tabelę child2 jako select * from child;" chociaż musisz ręcznie dodać ograniczenie PK. – chacmool
@chacmool Nie można dodać ograniczenia PK ręcznie po utworzeniu tabeli. [SQLite Docs] (https://www.sqlite.org/lang_createtable.html) –
myślę, że to jest łatwiejsze, bardziej zwięzły podejście:
copy db.sqlite3 backup-db.sqlite3
echo .dump tablename | sqlite3 db.sqlite3 > modify.sql
(now delete or change the constraint in modify.sql)
echo drop table tablename; | sqlite3 db.sqlite3
sqlite3 db.sqlite3 < modify.sql
Można teraz redump nowej tabeli bazy danych i porównać różnice.
Pod Linuksem/sh, możesz potrzebować użyć 'echo drop table tablename \;'. Zwróć uwagę na ukośnik odwrotny przed średnikiem. – jftuga
Należy również wziąć pod uwagę, że w przypadku podejścia paxdiablo można umieścić całą operację wewnątrz transakcji, która zostanie wycofana, jeśli jakikolwiek krok się nie powiedzie, pozostawiając bazę danych w pierwotnym stanie. Przy swoim podejściu będziesz chciał sprawdzić błędy w krokach 2, 4 i 5 i odpowiednio przerwać, co sprawia, że kod jest dużo mniej zwięzły. –
SQLiteStudio pozwala wyeksportować całą bazę danych jako SQL. Który pozwala ci postępować jak jftuga z pomocą narzędzia wiersza poleceń. –
http://sqlite.org/lang_dropindex.html –