我有一个表,其中包含一个带有2个约束的唯一键。我想改变表格,以便我可以删除那里唯一字段中的一个约束。
我当前的数据库架构:
CREATE TABLE testtable(test1 TEXT, test2 TEXT, test3 TEXT, test4 TEXT DEFAULT FALSE,UNIQUE (test1,test2))
我已经在这个表中填充了数据,并且不想在我的下一个版本中删除并重新创建此表。有没有办法改变表的独特字段。我没有为我的表设置约束。
我希望我的数据库架构在更新后就像这样。
CREATE TABLE testtable(test1 TEXT, test2 TEXT, test3 TEXT, test4 TEXT DEFAULT FALSE,UNIQUE (test1))
答案 0 :(得分:7)
在其他DBMS中,您将使用ALTER TABLE DROP CONSTRAINT ...
。但是,sqlite仅支持RENAME TABLE
命令(Source)的ADD COLUMN
和ALTER TABLE
变体。
因此,我担心你必须创建一个新表:
CREATE TABLE testtable2(
test1 TEXT, test2 TEXT, test3 TEXT, test4 TEXT DEFAULT FALSE,
UNIQUE (test1)
);
然后将旧表中的数据插入新表:
INSERT INTO testtable2 SELECT * FROM testtable;
然后你可以放弃旧桌子:
DROP TABLE testtable;
最后将新表重命名为原始名称:
ALTER TABLE testtable2 RENAME TO testtable;
<强>更新强>
小心你的新约束将不那么宽容。例如,如果原始表中包含以下行:
test1 test2 test3 test4
---------- ---------- ---------- ----------
a a 100 1
a b 200 2
a c 300 3
然后INSERT INTO testtable2 SELECT * FROM testtable;
会失败,因为test1
不是唯一的:
SQL error: column test1 is not unique