既存のテーブルに複雑な一意キーを追加したい。キーには4つのフィールド(user_id
、game_id
、date
、time
)が含まれます。ただし、テーブルには一意でない行があります。重複する日付をすべて削除し、その後で複雑なキーを追加できることを理解しています。
すべての重複データを検索せずに別のソリューションが存在する場合があります。 (ユニークな無視などの追加など)。
UPDを検索しましたが、重複したmysql行を削除するにはどうすればよいですか-それは良い解決策だと思います。 MySQLクエリのみを使用して重複を削除しますか?
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)
しかし、既存のデータを失わないように、インデント列を追加してから複合キーを作成できます。
適切な構文は次のとおりです-ALTER TABLE Table_Name ADD UNIQUE (column_name)
例
ALTER TABLE 0_value_addition_setup ADD UNIQUE (`value_code`)
同様の問題を解決しなければなりませんでした。主キーを持たない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が入力されます)。
私はあなたのソリューションにあなたのビジネスロジックの仮定を提供しています。私のデザインでは基本的に、ユーザーとゲームの組み合わせに対してテーブルに1つのレコードのみを保存できます。そこで、複合キーをテーブルに追加します。
PRIMARY KEY (`user_id`,`game_id`)
自動インクリメントIDまたは一意のIDを作成し、4つのフィールドで説明している自然キーに追加します。これにより、テーブルのすべての行が一意になります...
MySQLの場合:
ALTER TABLE MyTable ADD MyId INT AUTO_INCREMENT PRIMARY KEY;
テーブルに複数の一意キーを設定
ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);