0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MySQL で複数種類の複合ユニーク制約をつける (NULLも許容) (+Railsのマイグレーション例)

Last updated at Posted at 2023-11-23

概要

知らなかったが MySQL で複合キーのユニーク制約を付けた場合、nullのあるカラムは許容してくれるみたいだ。

たとえば column_1column_2 で複合ユニーク制約のあるテーブルで、 以下2個のレコードを追加した場合、 ユニーク制約に引っ掛かりそうだが許容してくれる

column_1の値: AAA
column_2の値: NULL
column_1の値: AAA
column_2の値: NULL

こうすると例えば、1テーブルで複数の複合ユニーク制約があっても、問題なく扱うことが出来る

たとえば column_1 / column_2 の組み合わせと column_3 / column_4 の組み合わせでそれぞれ複合ユニーク制約がある場合、片方の組み合わせはNULLでも問題なくなるのだ

column_1の値: NULL
column_2の値: NULL
column_3の値: YES
column_4の値: YES
column_1の値: NULL
column_2の値: NULL
column_3の値: YES
column_4の値: NO

Ruby on Rails でのマイグレーションの例

普通に複合ユニーク制約を複数追加するだけで良い

class AddUniquenessToExampleTable < ActiveRecord::Migration[7.1]
  def change
    add_index :examples, [:column_1, :column_2], unique: true, name: 'index_examples_uniqueness_1'
    add_index :examinees, [:column_3, :column_4], unique: true, name: 'index_examples_uniqueness_2'
  end
end

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?