在SQLite FAQ[1]中提到,SQLite没有完全的ALTER TABLE支持。在之前关于StackOverflow [2]的问题中,提到了一个完成表修改的技巧。
我想知道的是如何保留FOREIGN KEY引用,因为这些引用被移动到重命名的表,随后被删除。我是否应该对每个与我正在修改的实际表有外键关系的表执行同样的技巧?
[1][http://www.sqlite.org/lang_altertable.html](http://www.sqlite.org/lang_altertable.html)
[2][How do I rename a column in a SQLite database table?](https://stackoverflow.com/questions/805363/how-do-i-rename-a-column-in-a-sqlite-database-table)
3条答案
按热度按时间oxosxuxt1#
使用当前版本的SQLite,当使用
PRAGMA foreign_keys=OFF
禁用外键处理时,不会重写其他表中的引用约束。不能说这种行为在2011年是否有所不同。
rbl8hiat2#
是的,你需要做同样的“把戏”。重命名被引用表时,外键约束仍以新名称引用该表。由于SQLite不支持“DROP CONSTRAINT”,因此您还必须使用更正后的外键约束重新构建引用表。
事实上,在纠正外键引用之前,您将无法删除旧表。只要
PRAGMA foreign_keys=ON;
,SQLite3就不会让您删除仍然有外键引用它的表。kcrjzv8t3#
帮助我的诀窍:
在这个序列之后,外键指向
some
而不是some_old