我想通过rails迁移在我的表中定义如下主键ID
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
我正在使用 mysql 数据库。
我想通过rails迁移在我的表中定义如下主键ID
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
我正在使用 mysql 数据库。
如果您希望避免在迁移中使用自定义 SQL,这也可以:
create_table(:user, id: false, primary_key: :id) do |t|
t.primary_key :id, :unsigned_integer, null: false, default: :null, auto_increment: true
t.string :name
end
只需#execute
在迁移中使用您需要的 SQL。
execute "ALTER TABLE things MODIFY id UNSIGNED(10) NOT NULL AUTO_INCREMENT"
或者,如果该列根本不存在:
execute "ALTER TABLE things ADD COLUMN id UNSIGNED(10) NOT NULL AUTO_INCREMENT PRIMARY KEY"
那应该可以正常工作。我认为在您的迁移中,可以使用纯 SQL,并且在许多情况下这是必要的。
我解决了这个问题
create_table things, :id => false do |t|
t.column :id, 'INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)'
t.string :name
...
或者
create_table things, :id => false do |t|
t.column :id, ID_COLUMN
t.string :name
...
其中 ID_COLUMN 在某些配置/模块中定义并在其他迁移中使用
Rails 5.2 接受无符号
t.integer :amount, null: false, unsigned: true