所以我错误地创建了一个表格,其中的字段应该是NOT NULL。
我需要创建一个迁移来将字段从NULLABLE更改为NOT NULL,但是存在一些已经为NULL的行。
我可以更新这些行并更改字段吗?我试过这个:
osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'
但这失败并出现错误:
Mysql2 ::错误:无效使用NULL值:ALTER TABLE
有什么想法吗?需要在mysql和sql server上工作..
答案 0 :(得分:4)
首先确保没有NULL,然后更改约束。
选项1:
Country.where(effective_date: nil).update_all(effective_date: Time.now)
Country.where(expiry_date: nil).update_all(expiry_date: Time.new(9999,12,31))
change_column :countries, :effective_date, :date, :null => false
change_column :countries, :expiry_date, :date, :null => false
选项2:
change_column_null :countries, :effective_date, false, Time.now
change_column_null :countries, :expiry_date, false, Time.new(9999,12,31)
答案 1 :(得分:0)
您可以在添加约束之前为所有NULL列设置默认值,例如:
execute "UPDATE study_sites SET patients_recruited = 0 WHERE patients_recruited IS NULL"
change_column :study_sites, :patients_recruited, :integer, default: 0, null: false