rails 中的 Alter ignore table 的等价物是什么
What is the equivalent of Alter ignore table in rails
我有一个为 habtm 关系创建的连接 table。早些时候我为 table 创建了一个索引,但后来我想将唯一的 true 属性添加到索引中,我为此编写了一个新的迁移,它应该删除旧索引并创建新索引。但问题是我的数据库已经包含一些重复值,在 mysql 我们有办法使用
改变忽略 table。作为:
ALTER IGNORE TABLE pst_nw ADD UNIQUE INDEX (add1, add2, add3, add4);
它在 rails 中的等价物是什么?我们如何通过迁移指定忽略标志?
我认为 rails 中没有直接相当于 ALTER IGNORE TABLE
功能的单行代码。
将功能分成两部分可能是个好主意:
- 删除重复数据
- 添加唯一索引
第一个任务可以通过 运行 完成 ALTER IGNORE TABLE .. ADD UNIQUE INDEX..
步骤,然后是 DROP INDEX
步骤作为脚本的一部分(rake 任务 / 单独的脚本 / 运行 直接在 mysql 中查询),只需 运行 一次。
第二个将是一个简单的 add_index
迁移。
我的方法是 运行 使用 execute
的原始 ALTER IGNORE
SQL 查询,然后删除该索引并将其重新添加到 "Rails way"我的模式的一致性:
class AddUniqueIndexesToPstNw < ActiveRecord::Migration
def up
execute "ALTER IGNORE TABLE `pst_nw` ADD UNIQUE INDEX `drop_me` (add1, add2, add3, add4)"
remove_index :pst_nw, :drop_me
add_index :pst_nw, [:add1, :add2, :add3, :add4], unique: true
end
def down
remove_index :pst_nw, [:add1, :add2, :add3, :add4]
end
end
我有一个为 habtm 关系创建的连接 table。早些时候我为 table 创建了一个索引,但后来我想将唯一的 true 属性添加到索引中,我为此编写了一个新的迁移,它应该删除旧索引并创建新索引。但问题是我的数据库已经包含一些重复值,在 mysql 我们有办法使用 改变忽略 table。作为:
ALTER IGNORE TABLE pst_nw ADD UNIQUE INDEX (add1, add2, add3, add4);
它在 rails 中的等价物是什么?我们如何通过迁移指定忽略标志?
我认为 rails 中没有直接相当于 ALTER IGNORE TABLE
功能的单行代码。
将功能分成两部分可能是个好主意:
- 删除重复数据
- 添加唯一索引
第一个任务可以通过 运行 完成 ALTER IGNORE TABLE .. ADD UNIQUE INDEX..
步骤,然后是 DROP INDEX
步骤作为脚本的一部分(rake 任务 / 单独的脚本 / 运行 直接在 mysql 中查询),只需 运行 一次。
第二个将是一个简单的 add_index
迁移。
我的方法是 运行 使用 execute
的原始 ALTER IGNORE
SQL 查询,然后删除该索引并将其重新添加到 "Rails way"我的模式的一致性:
class AddUniqueIndexesToPstNw < ActiveRecord::Migration
def up
execute "ALTER IGNORE TABLE `pst_nw` ADD UNIQUE INDEX `drop_me` (add1, add2, add3, add4)"
remove_index :pst_nw, :drop_me
add_index :pst_nw, [:add1, :add2, :add3, :add4], unique: true
end
def down
remove_index :pst_nw, [:add1, :add2, :add3, :add4]
end
end