Rails 迁移:带有 unsigned int(10) 的主键 id

发布于 2024-11-24 03:32:18 字数 119 浏览 2 评论 0原文

我想通过 Rails 迁移在表中定义主键 id

id INT(10) UNSIGNED NOT NULL AUTO_INCRMENT

我正在使用 mysql db。

I want to define primary key id as below in my tables through rails migration

id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT

I am using mysql db.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不念旧人 2024-12-01 03:32:18

如果您希望避免在迁移中使用自定义 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

If you prefer to avoid custom SQL in migrations this will work as well:

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
你的笑 2024-12-01 03:32:18

只需将 #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,而且在很多情况下这是必要的。

Just use #execute with the SQL you need inside your migration.

execute "ALTER TABLE things MODIFY id UNSIGNED(10) NOT NULL AUTO_INCREMENT"

Or if the column doesn't yet exist at all:

execute "ALTER TABLE things ADD COLUMN id UNSIGNED(10) NOT NULL AUTO_INCREMENT PRIMARY KEY"

That should work fine. I think in your migrations it's fine to drop down to pure SQL, and in many cases it's necessary.

ζ澈沫 2024-12-01 03:32:18

进行了计算,并在其他迁移中使用

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

I worked out with this

create_table things, :id => false do |t|
  t.column :id, 'INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)'
  t.string :name
  ...

OR

create_table things, :id => false do |t|
  t.column :id, ID_COLUMN
  t.string :name
  ...

where ID_COLUMN defined in some config/module and used in other migrations as well

清风疏影 2024-12-01 03:32:18

Rails 5.2 确实接受无符号

t.integer     :amount,          null: false, unsigned: true

Rails 5.2 does accept unsigned

t.integer     :amount,          null: false, unsigned: true
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文