当前位置: 首页 > 知识库问答 >
问题:

将列添加为外键会给出外键约束中引用的 ERROR 列不存在

东方明亮
2023-03-14

我有以下设置,

CREATE TABLE auth_user ( id int PRIMARY KEY );
CREATE TABLE links_chatpicmessage ();

我正在尝试将一个名为 sender 的列添加到links_chatpicmessage这是另一个名为 auth_user id 列的表的外键。

为了实现上述目标,我在终端上尝试了以下方法:

ALTER TABLE links_chatpicmessage
  ADD FOREIGN KEY (sender)
  REFERENCES auth_user;

但是这给了我一个错误:

错误:外键约束中引用的列“sender”不存在

我该怎么解决这个问题?

共有3个答案

楚嘉玉
2023-03-14

我知道这个回答很晚了,我也意识到这和btubbs的一行程序一样,只是更具描述性...

假设您想引用表auth_user中的主键,并且该键名称为“id”。

我使用以下语法:

ALTER TABLE links_chatpicmessage 
ADD COLUMN sender some_type,
ADD FOREIGN KEY (sender) REFERENCES auth_user(id);

注意:some_type=[在表auth_user中键入与发送者相同的内容]

薛兴言
2023-03-14

您可以在Postgres的一行中执行此操作:

ALTER TABLE links_chatpicmessage 
    ADD COLUMN sender INTEGER 
    REFERENCES auth_user (id);

您无需手动设置名称。Postgres 会自动将此约束命名为“links_chatpicmessage_auth_user_id_fkey”。

尉迟阳煦
2023-03-14

要将约束添加到列中,它需要首先存在于表中 ,Postgreql中没有可用于同时添加列和添加约束的命令。它必须是两个单独的命令。 您可以使用以下命令执行此操作:

首先做:

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

我在这里使用整数作为类型,但它应该是auth_user表的 id 列的相同类型。

然后你添加约束

ALTER TABLE links_chatpicmessage 
   ADD CONSTRAINT fk_someName
   FOREIGN KEY (sender) 
   REFERENCES auth_user(column_referenced_name);

此命令的< code > ADD CONSTRAINT fk _ someName 部分是为您的约束命名,这样,如果您以后需要用一些创建模型的工具来记录它,您将有一个命名的约束,而不是一个随机的名称。

它还服务于管理员的目的,因此DBA知道约束来自该表。

通常我们用一些提示来命名它,比如它从哪里来,在你的例子中引用到哪里,它应该是< code > fk _ links _ chatpicmessage _ auth _ user ,这样任何看到这个名字的人都会确切地知道这个约束是什么,而不用在INFORMATION_SCHEMA上做复杂的查询来找出答案。

编辑

如@btubbs的回答所述,您实际上可以在一个命令中添加带有约束的列。这样:

alter table links_chatpicmessage 
      add column sender integer, 
      add constraint fk_test 
      foreign key (sender) 
      references auth_user (id);
 类似资料:
  • 我的代码: 错误: 在课程和教师表的 ID 中插入数据后,我尝试运行第三个创建表代码,但没有变化。

  • 问题内容: 我发现创建一个查询有困难。假设我有一个“产品和品牌”表。我可以使用此命令添加外键, 但是,如果外键不存在,我只需要运行此命令。我需要类似的事情是在不使用名称的情况下删除“外键约束”(如果存在)。 问题答案: 首先,您应该始终命名您的FK以及所有其他约束,以免出现此类麻烦。 但是,如果您不知道FK的名称,则可以使用多个系统视图进行检查:

  • 下面是一个现有的模型,名为: 下面是我试图创建的新模型: 看起来很简单,对吧?所以我进行迁移: 在网上搜索,我只找到了一个关于Django的问题的例子(在创建表时Django MySQL错误),但这并没有帮助。没有迁移到,我也看不出为什么会有迁移,因为我们最近既没有修改这部分,也没有升级任何包。 对任何帮助深表感谢。

  • 我想添加两个表,一个产品表和一个类别表。然后我要将产品表中的一个类别id链接到类别表中的主键。下面是我的代码: SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table添加约束外键()引用())

  • mysql 5.7 外键约束 主表:部门表 从表:员工表 添加外键:从表 dep_id 关联 主表 id >[danger] CASCADE > 级联更新 主表数据更新从表会更新外键 级联删除 主表数据删除,从表会一起删除

  • 问题内容: 因此,我作为项目需求试图将外键约束添加到数据库中,并且它第一次或在两个不同的表上运行,但是在尝试添加外键约束时,我在两个表上遇到错误。我收到的错误消息是: 错误1215(HY000):无法添加外键约束 这是我用来创建表的SQL,两个有问题的表是和。 问题答案: 要查找特定错误,请运行以下命令: 并查看该部分。 子列的数据类型必须与父列完全匹配。例如,由于是,也需要是,而不是。 另外,您