gpt4 book ai didi

mysql - 当我尝试在 Rails 项目中创建唯一索引时出现空迁移

转载 作者:行者123 更新时间:2023-11-29 21:32:11 24 4
gpt4 key购买 nike

我正在使用 Rails 4.2.3 和 MySQL 5.5.37。我想在我的表上创建一个唯一约束,涉及多个列,所以我运行了...

rails generate migration add_index :user_objects, [:day, :object, :user], :unique => true

但是,这会生成一个文件 db/migrate/20160203003708_add_index.rb,其中没有任何内容......

class AddIndex < ActiveRecord::Migration
def change
end
end

很明显,当我运行“rake db:migrate”时什么也没有发生。在尝试跨多个列创建唯一索引时我做错了什么,在命令行上执行此操作的正确方法是什么?

最佳答案

根据migrations guidemigrations API docs从命令行生成迁移仅支持创建新表和添加新列。需要创建的表或添加的列由使用 _to_ 后面的部分的迁移名称确定。例如。运行如下命令:

rails generate migration add_username_to_user_objects username:string:uniq

将生成一个迁移,将唯一的username列(即使它已经存在)添加到user_objects表中。现在,即使该命令支持添加索引等,语法也可能很难记住且脆弱(因为 Bash 等),以至于许多人宁愿将代码写入文件中:) :

# db/migrate/20160203003708_add_index.rb
def change
add_index :user_objects, [:day, :object, :user], unique: true
end
<小时/>

建议:唯一索引中字段的顺序会影响性能以及有关 SQL 的其他一些规则。例如。如果 userusers 表的 FK,则将其放在前面将涵盖在 WHERE 中使用 user 的查询、ORDERGROUP BY 等(例如 SELECT ... FROM user_objects WHERE user_id = ...),无需单独的索引。但更重要的因素是cardinality ,这基本上是“user_objects 中的 dayobjectuser 中的每一个有多独特?”把最独特的放在第一位。

关于mysql - 当我尝试在 Rails 项目中创建唯一索引时出现空迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com