2017-04-14 22 views
0

を追加することはできません。私はは、私はこのテーブルを持っているいずれかのドロップ主キー

alter table event_schedule_tag add primary key(event_schedule_id, tag_id);

を実行したときしかし、私は得る: ERROR 1062 (23000): Duplicate entry '1130915-260' for key 'PRIMARY'

と私は

alter table event_schedule_tag drop primary key;

を実行したとき、私は得る: ERROR 1091 (42000): Can't DROP 'PRIMARY'; check that column/key exists

方法アウトとは何ですか?

EDIT:エラーメッセージが間違っています。私は "プライマリキーは既に存在する"と言っていますが、意味は "テーブルに重複があります - プライマリキーを作成できません"という意味です。 重複を削除し、問題のないプライマリキーを作成しました。ありがとう!

+3

重複エントリのためにプライマリキーが作成されませんでした。したがって、削除しようとするポイントはありません。最初に重複を削除します。 – Kapil

+0

http://stackoverflow.com/questions/27492732/mysql-duplicate-error-with-alter-ignore-tableを参照してください。これはあなたの質問に対する答えです。 – Anil

+0

'ERROR 1062(23000):キー 'PRIMARY'の重複したエントリ '1130915-260'は、タグID 260の組み合わせが複数あるスケジュールID 1130915と言っています。最初にこの状況を処理してから、両方の複合キーを作成することができます。 –

答えて

0

重複するデータのために、既存のテーブルに制約を追加することはできません。既存のテーブルから何かを削除したくない、もう一つの方法は、以下のステップを経てそれを行うことであろうと仮定すると:

  1. LIKEオペレータ(それはevent_schedule_tagテーブルと同じ構造を持つことになります)
  2. 追加で別のテーブルを作成します。新しいテーブルにそのテーブル上の制約primary key現在のテーブルから
  3. Insertすべての一意の行
  4. テーブルの名前を変更したり、新しいテーブルを使用するようにバックエンドを変更します。

SQL文は次のようになります。

CREATE TABLE `event_schedule_tag_unique` LIKE `event_schedule_tag`; 

ALTER TABLE event_schedule_tag_unique add primary key(event_schedule_id, tag_id); 

INSERT INTO event_schedule_tag_unique (event_schedule_id, tag_id) 
SELECT event_schedule_id, tag_id FROM event_schedule_tag 
GROUP BY event_schedule_id, tag_id 
HAVING COUNT(*) = 1; 

RENAME TABLE event_schedule_tag TO event_schedule_tag_archive; 

RENAME TABLE event_schedule_tag_unique TO event_schedule_tag; 
0

プライマリキーが作成されやったことがなかったため、重複したエントリに。 それを削除しようとしても意味がありません。 プライマリキーに固有の値を設定する必要があります。したがって、プライマリキーを作成するには、最初に複製を削除してください。

関連する問題