web-dev-qa-db-ja.com

既存のテーブルに一意のキーを追加する方法(一意でない行を含む)

既存のテーブルに複雑な一意キーを追加したい。キーには4つのフィールド(user_idgame_iddatetime)が含まれます。ただし、テーブルには一意でない行があります。重複する日付をすべて削除し、その後で複雑なキーを追加できることを理解しています。

すべての重複データを検索せずに別のソリューションが存在する場合があります。 (ユニークな無視などの追加など)。

UPDを検索しましたが、重複したmysql行を削除するにはどうすればよいですか-それは良い解決策だと思います。 MySQLクエリのみを使用して重複を削除しますか?

56
yAnTar

YAnTarのアドバイスに従って行うことができます

ALTER TABLE TABLE_NAME ADD Id INT AUTO_INCREMENT PRIMARY KEY

OR

制約を追加できます

ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time)

しかし、既存のデータを失わないように、インデント列を追加してから複合キーを作成できます。

113
Igor Lozovsky

適切な構文は次のとおりです-ALTER TABLE Table_Name ADD UNIQUE (column_name)

ALTER TABLE  0_value_addition_setup ADD UNIQUE (`value_code`)
14
radhason power

同様の問題を解決しなければなりませんでした。主キーを持たない15000近くのレコードを持つMS Accessから大きなソーステーブルを継承しました。これを正規化し、CakePHPと互換性を持たせる必要がありました。 CakePHPの規約の1つは、すべてのテーブルに主キーがあり、それが最初の列であり、「id」と呼ばれることです。次の簡単なステートメントは、MySQL 5.5の下で私のためにトリックをしました。

ALTER TABLE `database_name`.`table_name` 
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (`id`);

これにより、既存のデータの前に整数型の新しい列「id」が追加されました(「FIRST」キーワード)。 AUTO_INCREMENTキーワードは、1から始まるIDをインクリメントします。現在、すべてのデータセットには一意の数値IDがあります。 (AUTO_INCREMENTステートメントがなければ、すべての行にid = 0が入力されます)。

10
user3149374

私はあなたのソリューションにあなたのビジネスロジックの仮定を提供しています。私のデザインでは基本的に、ユーザーとゲームの組み合わせに対してテーブルに1つのレコードのみを保存できます。そこで、複合キーをテーブルに追加します。

PRIMARY KEY (`user_id`,`game_id`)
3
Slowcoder

自動インクリメントIDまたは一意のIDを作成し、4つのフィールドで説明している自然キーに追加します。これにより、テーブルのすべての行が一意になります...

2
Hituptony

MySQLの場合:

ALTER TABLE MyTable ADD MyId INT AUTO_INCREMENT PRIMARY KEY;
0
Vette

テーブルに複数の一意キーを設定

ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);
0
prakash kumar