2013-09-29 39 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 
相关问题