目次
バッチ更新
性能分析
QUESTION:" >QUESTION:
SOLVE:" >SOLVE:
ホームページ データベース mysql チュートリアル MySQL Advanced (14) バッチ更新と値の異なる複数レコードの一括更新の実装方法

MySQL Advanced (14) バッチ更新と値の異なる複数レコードの一括更新の実装方法

Feb 10, 2017 am 11:03 AM
バッチアップデート

mysql バッチ更新と異なる値を持つ複数のレコードのバッチ更新の実装方法

mysql では、update を使用し、操作するには に置き換えることができます。詳細は次のとおりです mysql バッチアップデートとパフォーマンス

バッチ更新

mysql update ステートメントは非常に簡単で、データの特定のフィールドを更新するには、通常次のように記述します:

UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';
ログイン後にコピー


同じフィールドを同じ値の mysql も非常に簡単です。whereを変更するだけです。ここで、「other_values」

はカンマ(,)で区切られた文字列であることに注意してください。例: 1,2,3

複数のデータを異なる値に更新する場合、多くの人は次のように書くかもしれません:

UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values');
ログイン後にコピー

つまり、更新レコードを 1 つずつループします。 。レコードは 1 回更新されるため、パフォーマンスが低下し、輻輳が発生しやすくなります。

では、バッチ更新は 1 つの sql
ステートメントで実装できるでしょうか?

mysql はバッチ更新を実装するための直接的な方法を提供していませんが、いくつかのトリックで実現できます。

foreach ($display_order as $id => $ordinal) { 
    $sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id"; 
    mysql_query($sql); 
}
ログイン後にコピー

ここでは、

ケースを使用して、バッチ更新を達成するための小さなトリックを使用します。 例:

UPDATE mytable 
    SET myfield = CASE id 
        WHEN 1 THEN 'value'
        WHEN 2 THEN 'value'
        WHEN 3 THEN 'value'
    END
WHERE id IN (1,2,3)
ログイン後にコピー

この文sql

は、

id=1

thenの場合、

display_order

フィールドを更新することを意味しますdisplay_order の値は 3id=2 の場合、display_order の値は4id=3 の場合、display_orderの値5ですは条件文をまとめて書くことです。 ここの where 部分はコードの実行には影響しませんが、sql の実行効率が向上します。

sql

ステートメントは、変更が必要な行数のみを実行するようにします。ここでは、3 個のデータのみが更新されるのに対し、where 句は 3 のみを更新します。 データ行が実行されます。 複数の値を更新する場合は、わずかに変更するだけで済みます:

UPDATE categories 
    SET display_order = CASE id 
        WHEN 1 THEN 3 
        WHEN 2 THEN 4 
        WHEN 3 THEN 5 
    END
WHERE id IN (1,2,3)
ログイン後にコピー
この時点で、複数のレコードを更新するための 1 つの mysql

ステートメントが完了しました。

しかし、ビジネスで使用するには、サーバーサイド言語と組み合わせる必要があります。ここでは、mysql

ステートメントを構築するための例として

phpを取り上げます。

这个例子,有8条记录进行更新。代码也很容易理解,你学会了吗

性能分析

当我使用上万条记录利用mysql批量更新,发现使用最原始的批量update发现性能很差,将网上看到的总结一下一共有以下三种办法:

1.批量update,一条记录update一次,性能很差

update test_tbl set dr='2' where id=1;
ログイン後にコピー


2.replace into 或者insert into ...on duplicate key update

replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y');
ログイン後にコピー


或者使用

insert into test_tbl (id,dr) values  (1,'2'),(2,'3'),...(x,'y') on duplicate key update dr=values(dr);
ログイン後にコピー


3.创建临时表,先更新临时表,然后从临时表中update

create temporary table tmp(id int(4) primary key,dr varchar(50));
insert into tmp values  (0,'gone'), (1,'xx'),...(m,'yy');
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;
ログイン後にコピー


注意:这种方法需要用户有temporary 表的create 权限。

下面是上述方法update 100000条数据的性能测试结果:

逐条update

real 0m15.557s

user 0m1.684s

sys 0m1.372s

replace into

real 0m1.394s

user 0m0.060s

sys 0m0.012s

insert into on duplicate key update

real 0m1.474s

user 0m0.052s

sys 0m0.008s

create temporary table and update:

real 0m0.643s

user 0m0.064s

sys 0m0.004s

就测试结果来看,测试当时使用replace into性能较好。

replace into insert into on duplicate key update的不同在于:

replace into 操作本质是对重复的记录先delete insert,如果更新的字段不全会将缺失的字段置为缺省值

insert into 则是只update重复记录,不会改变其它字段。

QUESTION:

Error Code: 1175. You are using safe update mode and you tried to update a table without a 
WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.
ログイン後にコピー

SOLVE:

原因是在safe mode,要强制安全点,update只能跟where, 要取消这个限制,可以:

SET SQL_SAFE_UPDATES=0;
ログイン後にコピー

以上就是mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法 的内容,更多相关内容请关注PHP中文网(www.php.cn)!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracle ストアド プロシージャを使用してバッチ更新を実装する手順と注意事項 Oracle ストアド プロシージャを使用してバッチ更新を実装する手順と注意事項 Mar 08, 2024 pm 04:12 PM

タイトル: Oracle ストアド プロシージャによるバッチ更新を実装するための手順と注意事項 Oracle データベースでは、ストアド プロシージャは、データベースのパフォーマンスの向上、コードの再利用、およびセキュリティの強化を目的に設計された一連の SQL ステートメントです。ストアド プロシージャを使用して、データをバッチで更新できます。この記事では、Oracle ストアド プロシージャを使用してバッチ更新を実装する方法を紹介し、具体的なコード例を示します。ステップ 1: ストアド プロシージャを作成する まず、バッチ更新操作を実装するストアド プロシージャを作成する必要があります。ストアドプロシージャの作成方法は次のとおりです。

データ処理におけるOracleストアドプロシージャ一括更新の適用事例 データ処理におけるOracleストアドプロシージャ一括更新の適用事例 Mar 08, 2024 am 10:24 AM

データ処理におけるOracleストアドプロシージャの一括更新の適用事例 実際のデータ処理では、データベース内の大量のデータを更新する必要が生じることがよくあります。 Oracle データベースはストアド プロシージャの機能を提供します。これにより、これらの大規模なバッチ データ更新操作を効果的に処理し、データ処理の効率とパフォーマンスを向上させることができます。この記事では、Oracle ストアド プロシージャのバッチ更新の適用例を紹介し、読者がこの機能をよりよく理解して使用できるように、具体的なコード例を示します。ケースの背景

Vue と Excel の暗黙の連携: データの一括更新とインポートを実現する方法 Vue と Excel の暗黙の連携: データの一括更新とインポートを実現する方法 Jul 22, 2023 pm 09:03 PM

Vue と Excel の暗黙の連携: データの一括更新とインポートを実現する方法 はじめに: 情報技術の急速な発展に伴い、Excel テーブルは人気のデータ管理ツールとして、さまざまな業界や分野で広く使用されています。同時に、Vue は柔軟で効率的なフロントエンド開発フレームワークとしても広く普及しています。この記事では、VueとExcelの暗黙の連携によりデータの一括更新とインポートを実現する方法を紹介します。読者の理解を深めるために、コード例を示します。データのバッチ更新を実装する: V で

Hibernate で一括挿入更新操作を実行するにはどうすればよいですか? Hibernate で一括挿入更新操作を実行するにはどうすればよいですか? Aug 27, 2023 pm 11:17 PM

この記事では、Hibernate で一括挿入/更新を実行する方法を説明します。 SQL ステートメントを実行するときは、データベースに対してネットワーク呼び出しを行うことによって実行されます。ここで、データベース テーブルに 10 個のエントリを挿入する必要がある場合、10 回のネットワーク呼び出しを行う必要があります。代わりに、バッチ処理を使用してネットワーク呼び出しを最適化できます。バッチ処理を使用すると、単一のネットワーク呼び出しで一連の SQL ステートメントを実行できます。これを理解して実装するには、エンティティを定義しましょう- @EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)

Vue と Excel の効率的な組み合わせ: データの一括更新とインポートを実現する方法 Vue と Excel の効率的な組み合わせ: データの一括更新とインポートを実現する方法 Jul 21, 2023 pm 10:00 PM

Vue と Excel の効率的な組み合わせ: データの一括更新とインポートを実現する方法 Web アプリケーションの継続的な開発とデータ量の増加に伴い、データをバッチで更新およびインポートする必要がある状況に頻繁に遭遇します。広く使用されているスプレッドシート ツールである Excel は、強力なデータ処理機能とインポートおよびエクスポート機能を備えており、大量のデータを処理するための第一選択ツールの 1 つとなっています。この記事では、VueとExcelを使ってデータの一括更新やインポートを実装し、データ処理の効率化を図る方法を紹介します。まず必要なのは、

Java 開発におけるデータベース更新のパフォーマンスの問題を解決する方法 Java 開発におけるデータベース更新のパフォーマンスの問題を解決する方法 Jun 29, 2023 pm 01:00 PM

Java 開発におけるデータベース更新のパフォーマンス問題を解決する方法 概要: データ量の増加とビジネスの変化に伴い、データベース更新のパフォーマンス問題が Java 開発における大きな課題となっています。この記事では、データベース更新のパフォーマンスの問題を解決するための一般的な方法とテクニックをいくつか紹介します。キーワード: Java 開発、データベース、アップデートのパフォーマンスの問題、解決策 はじめに: ほとんどの Java アプリケーションでは、データベースが重要な役割を果たします。データベースのパフォーマンスは、アプリケーションの応答速度と安定性に直接影響します。実際の開発では、この数は

MySQLでのバッチ更新方法 MySQLでのバッチ更新方法 Jun 15, 2023 pm 11:36 PM

MySQL は、多くの効果的なデータ操作方法を提供する、広く使用されているリレーショナル データベース管理システムです。大量のデータを更新する必要がある場合、バッチ更新方式を使用すると効率が向上します。この記事ではMySQLの一括更新方法を紹介します。 1. 一括更新とは何ですか?バッチ更新とは、1 つの SQL ステートメントを通じて複数のデータ行を更新することを指します。一度に 1 行を更新する方法と比較して、バッチ更新はデータベースの負荷とネットワーク伝送時間を効果的に削減し、データ操作の効率と速度を向上させることができます。 2. 一括アップデートの実施方法

Oracleストアドプロシージャ一括更新実装方法 Oracleストアドプロシージャ一括更新実装方法 Mar 08, 2024 pm 12:27 PM

タイトル: Oracle ストアド プロシージャの一括更新の実装方法 Oracle データベースでは、ストアド プロシージャを使用してデータを一括更新するのが一般的な操作です。バッチ更新により、データ処理の効率が向上し、データベースへの頻繁なアクセスが軽減され、コードの複雑さも軽減されます。この記事では、ストアド プロシージャを使用して Oracle データベースのデータをバッチで更新する方法と、具体的なコード例を紹介します。まず、データをバッチで更新する機能を実装するストアド プロシージャを作成する必要があります。下

See all articles