2013-09-29 40 views

回答

3

SQLite的ALTER TABLE statement不支持這一點。

最好的辦法是將數據庫導出爲文本(sqlite3工具中的.dump),刪除UNIQUE常量並重新創建數據庫。

5

ALTER TABLE in 是非常有限的。

但是,您可以在一定程度上使用CREATE INDEXCREATE TRIGGER更改一些限制條件。

,你可以,例如:

CREATE TABLE table_1(column_1, column_2); 
-- No constrains in table_1 
CREATE UNIQUE INDEX t1_c1_1 ON table_1 (column_1); 
-- From now, column_1 must be UNIQUE 
CREATE TRIGGER t1_c2_1i BEFORE INSERT ON table_1 WHEN column_2 IS NULL BEGIN 
    SELECT RAISE(ABORT, 'column_2 can not be NULL'); 
END; 
CREATE TRIGGER t1_c2_1u BEFORE UPDATE ON table_1 WHEN column_2 IS NULL BEGIN 
    SELECT RAISE(ABORT, 'column_2 can not be NULL'); 
END; 
-- From now, NULL column_2 update/insert will fail 
DROP TRIGGER t1_c1_1; 
-- Now column_1 doesn't need to be UNIQUE 
DROP TRIGGER t1_c2_1i; 
DROP TRIGGER t1_c2_1u; 
-- Now column_2 may be NULL 

注:

  • 你不能刪除現有的約束條件;
  • 創建索引會增加您的數據(索引數據);
  • 創建觸發器可能會降低表格性能。

另一個解決方法是重複現有表中刪除約束:

CREATE TEMP TABLE table_1 AS SELECT * FROM MAIN.table_1; 
DROP TABLE table_1; 
CREATE TABLE table_1 AS SELECT * FROM TEMP.table1; 
-- table_1 is now a copy from initial table_1, but without constraints 
相關問題