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

MySQL Rails: errno: 150"外键约束格式错误"

柴飞扬
2023-03-14

我正在尝试迁移Rails MySQL数据库,出现以下错误:

ActiveRecord::声明无效:MySQL2::Error:不能创建表开发.注释(errno: 150"外键约束格式不正确"): CREATE TABLE注释idintAUTO_INCREMENTPRIMary关键,注释varchar(255),user_idint,post_idint,created_atdatetime非空,updated_atdatetime非空,INDEXindex_comments_on_user_iduser_id),INDEXindex_comments_on_post_idpost_id),CONSTRAINTfk_rails_03de2dc08cFOREIGN KEY(user_id)REFERENCES用户id),CONSTRAINTfk_rails_2fd19c0db7FOREIGN KEY(post_id)REFERENCES<代码>帖子(id))ENGINE=InnoDB

以下是我的迁移:

class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      t.string :first_name
      t.string :last_name
      t.string :linkedin_username
      t.string :facebook_username
      t.string :facebook_id
      t.string :profile_image
      t.string :title_image
      t.string :connection
      t.boolean :team
      t.boolean :active
      t.boolean :admin
      t.string :email
      t.string :password_digest

      t.timestamps
    end
  end
end    

class CreateComments < ActiveRecord::Migration[5.0]
  def change
    create_table :comments do |t|
        t.string :comment
        t.references :user, foreign_key: true
        t.references :post, foreign_key: true
      t.timestamps
    end
  end
end

class CreateCategories < ActiveRecord::Migration[5.0]
  def change
    create_table :categories do |t|
        t.string :name
      t.text :description

      t.timestamps null: false
    end
  end
end

class CreatePosts < ActiveRecord::Migration[5.0]
  def change
    create_table :posts do |t|
        t.string :title
      t.string :description
      t.references :category, foreign_key: true
      t.references :user, foreign_key: true
    end
  end
end

如果有人能在这里给我一个想法,我会非常感激。我一直在谷歌上搜索解决方案,但现在找不到任何与Rails相关的东西。谢谢你!

共有1个答案

子车高歌
2023-03-14

我刚刚找到了这个问题的答案。我的错误与我的posts表迁移是最后一次有关。My comments表迁移引用了post表id父字段。当我重新生成注释表迁移并删除之前的注释表迁移时,一切都很顺利。

 类似资料:
  • 我正在尝试迁移我的Rails MySQL数据库,但遇到以下错误: ActiveRecord::StatementInvalid:mysql2::错误:无法创建表。(错误号:150“外键约束格式不正确”):创建表(int AUTO_INCREMENT主键,varchar(255),int,int,datetime不为空, 以下是我的迁移: 如果有人能在这里给我一个主意,我将非常感谢。我已经搜索了一段

  • 我有一个帖子表和一个到达表,它引用了flight no(文本字符串格式)作为外键。然而,当我运行Laravel迁移时,我得到了可怕的错误: SQLSTATE[HY000]:常规错误: 1005不能创建表.(errno: 150"外键约束格式不正确")(SQL:改变表添加约束外键()引用() [PDOExc0019]SQLSTATE[HY000]:常规错误: 1005不能创建表.(errno: 15

  • 我有一个订单表和一个有一个引用作为一个外来的。然而,当我运行Laravel迁移我得到可怕的错误代码: SQLSTATE[HY000]:常规错误: 1005不能创建表.(errno: 150"外键约束格式不正确")(SQL:改变表add约束外键()引用() SQLSTATE[HY000]:常规错误: 1005不能创建表.(errno: 150"外键约束格式不正确") 这是我的表模式: 这是我的sch

  • 问题内容: 我有两个表,是一列父表,并与一列(而不是实际的名称),当我把一个FK上,以在我得到的错误。如果要删除记录,我想删除表2记录。谢谢你的帮助 让我知道是否需要其他信息。我是mysql新手 问题答案: 我在HeidiSQL中遇到了同样的问题。您收到的错误非常神秘。我的问题最终是外键列和引用列的类型或长度不同。 外键列为,引用列为。一旦将它们设置为完全相同的类型,外键创建就可以完美地工作了。

  • 进行4次迁移,如下所示。这是用户表。 这就是艺术家的迁移。 这是歌曲迁移。 这就是专辑迁移。 这是一个连接众多艺术家和歌曲的特色。 当我尝试迁移这四个迁移时,会出现此错误。

  • 我试图执行此迁移: 用户: 文章: 但当我迁移时,会出现以下错误: SQLSTATE[HY000]:一般错误: 1005不能创建表.(Errcode: 150"外键约束是inc orrecly形成的")(SQL:更改表添加约束外键()引用()在更新级联上删除级联) 我已经尝试将大整数和大增量重命名为简单整数和增量,但没有成功。