首页 > 解决方案 > 如何为已经创建的表添加外键?

问题描述

我已将一个表添加到名为 settings 的数据库中。该表有一个名为 id(整数)的列,它是 pirmary 键。我还在一个名为会话的表中添加了一个名为 settingsID 的列。我想要做的是将外键添加到引用主键的 settingsID 中。

我不想创建一个新表,因为它已经创建了。我要做的就是从会话表中的 settingsID 中的设置表中引用 id。

ALTER TABLE Sessions ADD FOREIGN KEY (_SettingsID) REFERENCES settings (id)

这是我的错误:

“外国”附近:语法错误

有人能告诉我解决这个问题的正确方法吗?

标签: sqlsqliteforeign-keys

解决方案


简短的回答:你不能。

这被记录为SQLite 未实现的 SQL 功能的一部分:

仅支持命令的RENAME TABLEADD COLUMNRENAME COLUMN变体。ALTER TABLE省略其他类型的ALTER TABLE操作,例如DROP COLUMNALTER COLUMNADD CONSTRAINT等。

大胆的强调是我的。

所以基本上你需要在创建表时创建约束。对于您的用例,一种解决方案是:

  • 创建一个新表(带有外键约束)
  • 从旧表中复制数据
  • 删除旧表(或者更好的是,重命名它,这样你就有了备份)
  • 重命名新表

推荐阅读