2009-12-10 10 views

Odpowiedz

73

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.

+0

Smutna buzia. Tak właśnie myślałem. Miałem nadzieję, że nie zrozumiałem "nie zatwierdzonego" dokumentu. –

+1

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

+1

@chacmool Nie można dodać ograniczenia PK ręcznie po utworzeniu tabeli. [SQLite Docs] (https://www.sqlite.org/lang_createtable.html) –

4

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.

+1

Pod Linuksem/sh, możesz potrzebować użyć 'echo drop table tablename \;'. Zwróć uwagę na ukośnik odwrotny przed średnikiem. – jftuga

+1

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. –

+0

SQLiteStudio pozwala wyeksportować całą bazę danych jako SQL. Który pozwala ci postępować jak jftuga z pomocą narzędzia wiersza poleceń. –

Powiązane problemy