【发布时间】:2011-08-11 06:20:04
【问题描述】:
我需要将字段的默认值从 0 更改为 3,但问题是我已经有数千条记录,并且希望这些记录仅在记录的默认值为 0 时才将值从 0 更改为 3,但对于其他值,如 1、2,它应该保持不变。我该怎么做?
【问题讨论】:
-
你不能只是'UPDATE table SET value = 3 WHERE value = 0'吗?
标签: mysql ruby-on-rails
我需要将字段的默认值从 0 更改为 3,但问题是我已经有数千条记录,并且希望这些记录仅在记录的默认值为 0 时才将值从 0 更改为 3,但对于其他值,如 1、2,它应该保持不变。我该怎么做?
【问题讨论】:
标签: mysql ruby-on-rails
在迁移中,您应该使用 change_column 方法来更改表设置,如下所示:
change_column :my_models, :attribute_name, :integer, :default => 3
然后要更新所有现有记录,而不是遍历所有记录并单独更新它们,您可以使用 update_all 方法,如下所示:
MyModel.update_all({ :attribute_name => 3 }, { :attribute_name => 0 })
第一个参数告诉方法要设置什么值,第二个参数告诉它要更新哪些行的条件。
【讨论】:
MyModel.update_all({:attribute_name => 3}, {:attribute_name => 0})
change 块中,而是在迁移中手动定义up 和down,并且只在up 方法中调用update_all。第二件事是稍微长期一些,如果您最终将模型全部移除会发生什么?在这种情况下,您将得到一个使用不存在的模型的迁移。只是想一想。
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
【讨论】: