sql - 如何为已经创建的表添加外键?
问题描述
我已将一个表添加到名为 settings 的数据库中。该表有一个名为 id(整数)的列,它是 pirmary 键。我还在一个名为会话的表中添加了一个名为 settingsID 的列。我想要做的是将外键添加到引用主键的 settingsID 中。
我不想创建一个新表,因为它已经创建了。我要做的就是从会话表中的 settingsID 中的设置表中引用 id。
ALTER TABLE Sessions ADD FOREIGN KEY (_SettingsID) REFERENCES settings (id)
这是我的错误:
“外国”附近:语法错误
有人能告诉我解决这个问题的正确方法吗?
解决方案
简短的回答:你不能。
这被记录为SQLite 未实现的 SQL 功能的一部分:
仅支持命令的
RENAME TABLE
、ADD COLUMN
和RENAME COLUMN
变体。ALTER TABLE
省略其他类型的ALTER TABLE
操作,例如DROP COLUMN
、ALTER COLUMN
、ADD CONSTRAINT
等。
大胆的强调是我的。
所以基本上你需要在创建表时创建约束。对于您的用例,一种解决方案是:
- 创建一个新表(带有外键约束)
- 从旧表中复制数据
- 删除旧表(或者更好的是,重命名它,这样你就有了备份)
- 重命名新表
推荐阅读
- python - SQL Max Date在Python中返回到日期时间
- python - 为部落语言词性标注创建语料库
- gdb - 在退出时获取劣质进程的回溯
- qt - 是什么导致qtcreator停止更新ui头文件
- opentok - API Opentok 中 PacketLoss 和 BitRate 的区别?
- ios - iBeacon 监控具有相同 UUID 和不同主要、次要的多个信标
- grammar - 有人可以帮我将语法转换为正则表达式
- java - 错误:需要类、接口或枚举(实现 java)
- r - 带有字符串的嵌套 ifelse 语句
- apache - .htaccess [OR] 条件未满足导致意外的 RewriteRule