MySQLでバッチを更新するいくつかの方法

MySQLでバッチを更新するいくつかの方法

通常、フィールド値を更新するには次の SQL ステートメントを使用します。

mytable を更新し、myfield='value' を設定し、other_field='other_value' を設定します。

しかし、複数行のデータを更新したい場合、各行のフィールド値が異なる場合はどうすればよいでしょうか?最初は、次の Python プログラム例のように、ループを使用して複数の UPDATE ステートメントを実行することを考えるかもしれません。

xrange(10)内のxの場合:
  sql = ''' UPDATE mytable SET myfield='value' WHERE other_field='other_value'; '''

この方法には何の問題もなく、コードもシンプルでわかりやすいのですが、ループ文の中で複数の SQL クエリが実行されます。システムを最適化するときは、常にデータベース クエリの数をできるだけ減らして、リソースの使用量を減らし、システム速度を向上させたいものです。幸いなことに、もっと良い解決策があります。SQL ステートメントは少し複雑ですが、実行する必要があるのは 1 つのクエリだけです。構文は次のとおりです。

mytable を更新
  SET myfield = CASE other_field
    1 の場合、「値」
    WHEN 2 THEN '値'
    3 の場合、「値」
  終わり
id が (1,2,3) にある場合

この SQL 文は理解しやすいです。多くのプログラミング言語で一般的なキーワード CASE を使用して、id フィールドの値に基づいてさまざまなブランチの型判定を実行します。

複数のフィールドを連続して更新する必要がある場合は、次の SQL ステートメントを使用できます。

カテゴリーの更新
  SET display_order = ケースid
    1のとき3
    2のとき4
    3のとき5
  終わり、
  タイトル = ケースID
    1 の場合、「新しいタイトル 1」
    2 なら「新タイトル2」
    3 なら「新タイトル3」
  終わり
id が (1,2,3) にある場合

上記の方式により、データベース クエリ操作の数が大幅に削減され、システム リソースが大幅に節約されます。

ただし、これには欠点があります。注意が必要なのは、SQL 文の長さです。プログラム実行環境でサポートされている文字列の長さを考慮する必要があります。もちろん、これは MySQL 設定を更新することで拡張することもできます。

もちろん、Python のような強力な言語は、データの挿入だけでなく、データを更新できる executemany のような強力なメソッドも提供しています。頻繁に何かを行う人にとっては、結果を比較するためにこれらのものを頻繁に使用する必要があります。

update_sql = ''' mayi_order_image を更新 
order_city = %s に設定
ここで、user_ip = %s、dt = %s、id = %s 
 user_ip は null ではなく、(order_city は null または order_city = '' )
 '''
pp = []
xrange(len(result))内のxの場合:
  ip = 結果[x][0]
  id_ = 結果[x][1]
  追加 = dbip.lookup(str(ip))
  追加 = add.split('\t')
  アドレス = str(adds[0]) + ','+str(adds[1] )+ ','+ str(adds[2])
  pp.append((アドレス,ip,end,id_))
  x%5000 == 0の場合:
    保存ログ_many(update_sql、pp)
    pp = []
保存ログ_many(update_sql、pp)

こちらの方が便利ですか?ただ、速度の問題に関しては、2番目の方法と組み合わせて比較した方が良いと思います。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL のバッチ更新と複数レコードの異なる値のバッチ更新
  • Mysql 更新マルチテーブル共同更新方法の概要
  • MySQLデータテーブルフィールドの内容に対するバッチ変更、クリア、コピー、その他の更新コマンド
  • MySQLは異なるテーブルのデータのバッチ更新を実装します

<<:  CentOS 8.0.1905 は ZABBIX 4.4 バージョンをインストールします (検証済み)

>>:  77.9K の GitHub リポジトリを持つ Axios プロジェクト: 学ぶ価値のあることは何でしょうか?

推薦する

Linuxシステムにおける重要なサブディレクトリの問題について話す

/etc/fstabパーティション/ディスクを自動的にマウントし、マウントするパーティション/デバイ...

Vue でのルーティングガードの具体的な使用法

目次1. グローバルガード1.1 グローバルフロントガード1.2 グローバルポストルートガード1.3...

Nginx におけるサーバーとロケーションのマッチングロジックの詳細な理解

サーバーマッチングロジックNginx は、リクエストを実行するサーバー ブロックを決定するときに、サ...

Vue でカスタムパスのエイリアスを設定する方法

Vue でカスタム パス エイリアスを設定する方法日常の開発では、モジュールやコンポーネントをインポ...

MySQL 8.0.17 winx64 (Navicat 付き) 手動構成バージョンのインストール チュートリアル図

1. ダウンロードアドレス: mysql-8.0.17-winx64ダウンロードして解凍する2. フ...

MySQL 結合クエリの原則の知識ポイント

MySQL 結合クエリ1. 基本概念2 つのテーブルの各行をペアで水平に接続して、すべての行の結果を...

CentOS7 上で KVM 仮想化プラットフォームを構築する (3 つの方法)

KVM はカーネルベースの仮想マシンの略で、Linux をハイパーバイザーに変換する Linux ...

Linux の EXT シリーズファイルシステムフォーマットの詳細な説明

Linux ファイルシステム一般的なハードディスクは上図のとおりです。各ディスクは複数のトラックに分...

Win10にnginxをインストールして設定するプロセス

1. はじめにNginx は、無料のオープンソースの高性能 HTTP サーバーおよびリバース プロキ...

Linuxで大きなファイルを素早くコピーする方法

データをコピーリモートでデータをコピーする場合、通常は rsync コマンドを使用しますが、小さなフ...

mysql8.0.18 で winx64 をインストールするための詳細なチュートリアル (画像とテキスト付き)

MySQLデータベースをダウンロードするには、https://dev.mysql.com/down...

HTML ページに画像を挿入し、マップ インデックスを追加する方法の例

1. WEBでサポートされている画像形式: GIF: 256色を保存でき、透明色をサポートし、アニメ...

MySQL データベース監視ソフトウェア lepus の使用上の問題と解決策

lepus3.7 を使用して MySQL データベースを監視中に、次の問題が発生しました。このブログ...

React+Amapは緯度と経度をリアルタイムで取得し、住所を特定します

目次1. マップを初期化する2. マップポイント3. 位置決めを有効にする4. マップの変更を監視す...

Vue での ref の使用法とデモンストレーション

ref 定義:要素またはサブコンポーネントの参照情報を登録するために使用されます。参照情報は、親コン...