我有一个表,其中包含一个带有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))
解决方法:
在其他DBMS中,您将使用ALTER TABLE DROP CONSTRAINT ….但是,sqlite仅支持ALTER TABLE命令的RENAME TABLE和ADD COLUMN变体(Source).
因此,我担心你必须创建一个新表:
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
标签:android,sqlite,sqlite3 来源: https://codeday.me/bug/20190730/1581396.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。