MySQL-既存のフィールドを一意にする


155

一意である必要があるが一意ではないフィールドを含む既存のテーブルがあります。すでに存在する別のエントリと同じ値を持つエントリがテーブルに作成され、これが問題を引き起こしたため、私はこれを知っています。

このフィールドに一意の値のみを入力させるにはどうすればよいですか?

回答:


293
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

MySQL 5.7.4以降の場合:

ALTER TABLE mytbl ADD UNIQUE (columnName);

MySQL 5.7.4以降、ALTER TABLEのIGNORE句が削除され、使用するとエラーが発生します。

したがって、IGNOREキーワードはサポートされなくなったため、最初に重複するエントリを削除してください。

参照


62
+1 If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. ドキュメント
スクラムマイスター、

1
特定の基準に基づいて行を削除するように指示する方法はありますか?または、ALTERこれを行う前に、前処理を行う必要があります。
corsiKa

7
ALTER IGNOREデータの安全のため、MySQLバージョン> 5.5およびInnoDBで重複エラーが発生する場合があります。複製された行の最初の行を保持することが正しいことであると確信している場合は、を試してくださいset session old_alter_table=1。元に戻すことを忘れないでください。mysqlolyk.wordpress.com/2012/02/18/...
michaelliu

2
5.6.7以降を使用してこの問題に遭遇した場合、IGNOREはサポートされなくなりました。moredocs私が今それを行う方法は、最初に重複がないことを確認することだと思いますか?
ウィリアムT.マラード2014

1
このクエリを実行する前に、必ずテーブルのバックアップコピーを作成してください。columnnameに同じ値があるか空の場合、最初の行を除くすべての行が削除されます。
–steady_daddy


16

制約にも名前を付けたい場合は、これを使用します。

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);


4

最も簡単で最も速い方法は、phpmyadmin構造テーブルを使用することです。

PHPMYADMIN管理パネルを使用してください!

そこはロシア語ですが、英語版も同じはずです。ユニークボタンをクリックしてください。また、そこから列をPRIMARYまたはDELETEにすることができます。



1

このコードは、既存のテーブルに一意のキーを設定するという問題を解決するためのものです

alter ignore table ioni_groups add unique (group_name);

ただし、列の外側を含むすべての重複を削除します
Biasi Wiga
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.