indexとprimary key

通常

マイグレーションファイル

class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :code
      t.timestamps
    end
    // unique設定、index設定
    add_index :users, :code, :unique => true
  end
end

テーブル定義

idがprimary keyになる。このままだと、codeカラムはnullを許容する。

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `code` varchar(255) DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_users_on_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

codeにnot null制約を追加

マイグレーションファイル

class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :code, null: false // not null制約を追加
      t.timestamps
    end
    add_index :users, :code, :unique => true
  end
end

テーブル定義

not null 制約が追加されている

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `code` varchar(255) NOT NULL, // not null制約が追加されている
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_users_on_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;