sql >> データベース >  >> RDS >> Mysql

mysqlの一意の識別子として複数の列を使用する

    はい、MySQLはこれを行う機能を提供します。

    ALTER TABLE MyTable
    ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
    

    このテーブルを何に使用しているのかわかりませんが、この一意のキーがテーブルの主キーの有力な候補である可能性があります。主キーは自動的に一意のキーにもなります。これを主キーにする場合は、代わりに次の手順を実行してください。

    ALTER TABLE MyTable
    ADD PRIMARY KEY (`group_id`, `user_id`)
    

    (すでに主キーが存在するというエラーメッセージが表示された場合は、ALTER TABLE MyTable DROP PRIMARY KEYを発行します。 次に、上記のコマンドを繰り返します。)

    編集: ユーザーのコメントに応えて

    NULL以外の同一の行を複数持つことはできません 一意キーでカバーされる列の値。したがって、group_id = 0 AND user_id = 5の2つの行を持つことはできません。 、 例えば。 0は値です。ただし、一方または両方の列をnull許容にすると、できます NULLの配置まで同一の複数の行があります s。したがって、group_id IS NULL AND user_id = 1234である2つ(またはそれ以上)の行を持つことができます。 。

    ただし、上記は、一般的に使用される両方のMySQLストレージエンジン(MyISAMとInnoDB)に当てはまります。 MySQLには、NULLのストレージエンジンがあります は一意の値と見なされますが、おそらくそれらを使用していません。

    一方または両方の列をNULL可能にすると、一意のキーを主キーにすることはできません。主キーは、NOT NULLの列に配置する必要があります。 。

    このキーを主キーにし、NULLを許可したいとします。 group_id内 桁。 group_idのデータ型がわかりません 現時点でです。現在はINT UNSIGNED NOT NULLだと思います 、ただし、これでない場合は、以下を変更する必要があります。このキーを主キーとして使用できなくなります。必要な変更を加えるために実行できるコマンドは次のとおりです。

    ALTER TABLE MyTable
        DROP PRIMARY KEY,
        MODIFY group_id INT UNSIGNED,
        ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)
    


    1. SQL ServerのCHARINDEX()とPATINDEX()–違いは何ですか?

    2. 大文字と小文字を区別しないMySQL照合を探しています。ここで!=ä

    3. INSERTステートメントがFOREIGNKEY制約と競合しています-SQLServer

    4. ClusterControlを使用してMariaDB10.3を管理する方法