tipo - valor por defecto campo mysql
La migraciĆ³n para cambiar el valor predeterminado de un campo y cambiar todo el valor del registro existente al nuevo valor predeterminado solo si tiene un valor predeterminado antiguo. (2)
Necesito cambiar el valor predeterminado de un campo de 0 a 3, pero el problema es que ya tengo miles de registros y deseo que esos registros cambien el valor de 3 a 0 solo si el registro tiene un valor predeterminado de 0, pero para otros valores como 1, 2 debe seguir siendo el mismo. ¿Cómo puedo hacerlo?
En la migración, debe usar el método change_column para modificar la configuración de la tabla de esta manera:
change_column :my_models, :attribute_name, :integer, :default => 3
Y luego, para actualizar todos los registros existentes, en lugar de recorrer todos los registros y actualizarlos individualmente, puede usar el método update_all como este:
MyModel.update_all({ :attribute_name => 3 }, { :attribute_name => 0 })
El primer argumento le dice al método qué valor establecer y el segundo le dice la condición para qué filas actualizar.
ALTER TABLE your_table MODIFY your_column tinyint(1) NOT NULL DEFAULT 3;
UPDATE your_table SET your_column=3 WHERE your_column=0;
- asumiendo que su columna es
tinyint(1)
, reemplácelo si no es el mismo -
NOT NULL
supone que siempre obliga a la columna aNOT NULl