我需要将字段的默认值从0更改为3,但是我已经拥有数千条记录并且希望这些记录仅在记录具有默认值0时才将值从0更改为3但是其他值如1,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;
tinyint(1)
,如果不是相同的话,请更换您的自己NOT NULL
假设您始终强制列为NOT NULl