如何从sqlite(3.6.21)表中删除约束?

我有下面的表格:

CREATE TABLE child( id INTEGER PRIMARY KEY, parent_id INTEGER CONSTRAINT parent_id REFERENCES parent(id), description TEXT); 

我如何删除约束?

SQLite不支持alter table drop constraint命令。 您将需要创build一个没有约束的新表,传输数据,然后删除旧表。

我觉得像下面的东西应该工作:

 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; 

如果你不想传输,你也可以从上面的所有语句中删除parent_id。

我认为这是一个更简单,更简洁的方法:

 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 

您现在可以重新创build新的数据库表并比较差异。