迁移以更改字段的默认值,并仅在具有旧的默认值时将所有现有记录的值更改为新的默认值。

时间:2011-08-11 06:20:04

标签: mysql ruby-on-rails

我需要将字段的默认值从0更改为3,但是我已经拥有数千条记录并且希望这些记录仅在记录具有默认值0时才将值从0更改为3但是其他值如1,2,它应该保持不变。我该怎么做?

2 个答案:

答案 0 :(得分:74)

在迁移中,您应该使用方法change_column来更改表设置,如下所示:

change_column :my_models, :attribute_name, :integer, :default => 3

然后更新所有现有记录,而不是循环遍历所有记录并单独更新它们,您可以使用方法update_all,如下所示:

MyModel.update_all({ :attribute_name => 3 }, { :attribute_name => 0 })

第一个参数告诉方法要设置什么值,第二个参数告诉它要更新哪些行的条件。

答案 1 :(得分:2)

ALTER TABLE your_table MODIFY your_column tinyint(1) NOT NULL DEFAULT 3;
UPDATE your_table SET your_column=3 WHERE your_column=0;
  1. 假设您的专栏是tinyint(1),如果不是相同的话,请更换您的自己
  2. NOT NULL假设您始终强制列为NOT NULl