[解決済み] MySQLのプライマリーキーを更新する
2022-03-10 08:58:08
質問
私はテーブルを持っています
user_interactions
を4列で表示します。
user_1
user_2
type
timestamp
主キーは
(user_1,user_2,type)
に変更したいのですが。
(user_2,user_1,type)
そこで私がしたことは.
drop primary key ...
add primary key (user_2,user_1,type)...
そして、出来上がりは...
問題は、データベースがサーバー上で稼動していることです。
そのため、主キーを更新する前に、すでに多くの重複が忍び込んでおり、現在も忍び込んでいる状態です。
どうすればいいんだ?
今やりたいことは、重複するものを削除し、最新の
timestamp
(これはテーブルのカラムです)。
そして、何らかの方法で再び主キーを更新します。
解決方法は?
次回は、1つの "alter table" ステートメントを使用して、主キーを更新してください。
alter table xx drop primary key, add primary key(k1, k2, k3);
物事を修正すること。
create table fixit (user_2, user_1, type, timestamp, n, primary key( user_2, user_1, type) );
lock table fixit write, user_interactions u write, user_interactions write;
insert into fixit
select user_2, user_1, type, max(timestamp), count(*) n from user_interactions u
group by user_2, user_1, type
having n > 1;
delete u from user_interactions u, fixit
where fixit.user_2 = u.user_2
and fixit.user_1 = u.user_1
and fixit.type = u.type
and fixit.timestamp != u.timestamp;
alter table user_interactions add primary key (user_2, user_1, type );
unlock tables;
この作業を行っている間、ロックはさらなる更新を停止させるはずです。 この作業にどれくらい時間がかかるかは、明らかにテーブルのサイズに依存します。
主な問題は、同じタイムスタンプを持つ重複がある場合です。
関連
-
[解決済み】MySQLのforeachループ
-
[解決済み] SQL エラー - テーブルの定義が正しくありません; auto カラムは 1 つしか存在できません。
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLで'insert if not exists'を行うにはどうしたらいいですか?
-
[解決済み] Sqliteの複数カラムの主キー
-
[解決済み] postgres の主キー配列が同期しなくなったときにリセットする方法は?
-
[解決済み] CREATE TABLE を別途作成せずに SELECT 文で一時テーブルを作成する。
-
[解決済み】MySQLで主キーを削除する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MySQL: グループ関数の無効な使用
-
[解決済み】1052:フィールドリストの列「id」が曖昧である
-
MySQLとのPython統合でAttributeErrorが発生する: モジュール 'socket' には 'AF_UNIX' という属性がない
-
[解決済み] テーブル 'performance_schema.session_variables' は存在しません。
-
[解決済み] mysqladmin: 'localhost'のサーバーへの接続に失敗しました。
-
[解決済み] MYSQLのTIMESTAMP比較
-
[解決済み] MySQLです。テーブルを作成できません (errno: 150)
-
[解決済み] MySQL エラー 1241。オペランドには1つのカラムが含まれている必要があります。
-
[解決済み] MongoDBのようにMySQLにもTTLがあるのでしょうか?
-
[解決済み] MySQLのカラムを並べ替えるには?