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

重複キー更新時のSQL更新

    まず最初に、その複数列の主キーはおそらく悪い考えです。ご存知のように、個々のフィールドを操作することは困難です。そのテーブルに自動インクリメントのbigint列を追加する必要があります。これが新しい主キーになり、代わりに3列の一意性制約を一意のインデックスにすることができます。パフォーマンスが向上するはずです...しかし、必要な種類の操作も可能になります。変更を実行できますが、整数インデックスによって元の行を識別できます。

    そうすれば、作業用の一時テーブルを作成してもかまわない限り、「1回限りの更新」を安全に実行できるようになります。このようなもの:

    同じスキーマを使用して、一意のを使用せずに、いくつかの一時テーブルを作成します。 3列のインデックス-実行しようとしているクエリに役立つため、一意でないインデックスを作成できます。

    処理する必要のあるレコードを最初のテーブルにコピーします(一意の整数の主キーを含む)。

    すべてのdetailを更新します 一時テーブルで更新する必要のある列;

    INSERT ... SELECTを使用します SUMを使用 およびGROUP BY それらのレコードを2番目のテーブルにマージします。

    INSERT INTO temp2 (...whatever...) SELECT ...whatever..., SUM(no) FROM temp1 GROUP BY ...whatever...
    

    最後に、元のテーブルからtemp1テーブルのすべてのレコードを削除し(整数の主キーを使用)、temp2テーブルのレコードを元のテーブルに挿入します。



    1. SQLiteでCREATEINDEXを正しく行う方法

    2. SonarQube:measures_data.ibdのサイズを減らす方法は?

    3. UNIONmysqlクエリを最適化する

    4. 動的Webサイトのセキュリティの質問(PHP + MySQL)