sql >> データベース >  >> RDS >> Mysql

MySQLの主キーを更新しています

    次回は、単一の「altertable」ステートメントを使用して主キーを更新します。

    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;
    

    ロックは、これを実行している間、それ以上の更新の受信を停止する必要があります。これにかかる時間は、明らかにテーブルのサイズによって異なります。

    主な問題は、同じタイムスタンプを持つ重複があるかどうかです。



    1. ラッパークラスの機能変換

    2. GI12.1.0.2とセグメンテーション違反をコンパイルできません

    3. XMLをSQLServerに挿入するときにエンコードエラーを切り替えることができない問題を解決する方法

    4. PythonでMySQLデータベースに接続するにはどうすればよいですか?