14

テーブルのフィールドがUNIQUEとして設定されているかどうかを確認するにはどうすればよいですか?

たとえば、フィールドが として設定され、フィールドが として設定されていないという名前のテーブルがありますusersemail選択UNIQUEするpictureUNIQUEに、フィールドが設定されているかどうかを確認UNIQUEしてから、SELECT.

次に、返された行数をカウントしようとしましたSELECTが、1 を超える場合はそうではありませんUNIQUE

"SELECT * FROM table WHERE email='$email'"
//...some mysql php line later
if($count > 1){
    //return nothing
}

しかし、それは効率的ではありません。重複がない場合はどうなりますか。

UNIQUEフィールドが次のように設定されているかどうかを確認する最良の方法は何PHPですか?

UNIQUE編集:重複がないからといって、プロパティがあるわけではありません

4

3 に答える 3

16

SHOW INDEXのドキュメントから(@diEcho が発見):

SHOW INDEX は次のフィールドを返します。

Non_unique -- インデックスに重複を含めることができない場合は 0、可能であれば 1。

Column_name -- 列名。

試す:

SHOW INDEXES
FROM $tablename
WHERE Column_name='$field'
AND NOT Non_unique

これは、複数の列にまたがる UNIQUE インデックスがないことを前提としていることに注意してください。存在する可能性がある場合は、サブクエリでこれらを除外することをお勧めします。

また、無効なインデックスもこのクエリに表示されることに注意してください (無効なインデックスの可能性については、Comment列のドキュメントに記載されています)。これを反映する列はないようですComment。インデックスを無効にしている場合は、列を解析する必要があるかもしれません。

数値と比較Non_uniqueする必要はありません - MySQL はとにかくブール値に 0 と 1 を使用します

于 2012-12-27T05:08:34.360 に答える
2

わかりました @diEcho のおかげで見つけました

public function isUniqueField($tablename, $field, $connection){
        $query = $connection->query("SHOW INDEXES FROM $tablename WHERE Column_name='$field' AND Non_unique=0");
        $query->execute();
        if(!$query->fetchAll()){
            return false;
        }
        return true;
    }
于 2012-12-27T04:59:39.990 に答える
1

インデックス付きのすべての列を確認できます

SHOW INDEX

UNIQUEインデックスがある場合、同じテーブルで値を重複させることはできませんが、UNIQUE インデックスでは、NULL を含むことができる列に複数の NULL 値を許可します

アップデート

列にUNIQUE制約を作成するには(電子メールを送信)、以下のクエリを使用します

  ALTER TABLE  `table_name` ADD UNIQUE (`email`);
于 2012-12-27T04:39:58.193 に答える