ホームページ >データベース >mysql チュートリアル >MySQL での UPDATE の使用法の詳細を詳しく調べる

MySQL での UPDATE の使用法の詳細を詳しく調べる

青灯夜游
青灯夜游転載
2022-10-11 19:32:203428ブラウズ

MySQL では、UPDATE ステートメントを使用して 1 つ以上のテーブルのデータを変更および更新できます。次の記事は、MySQL での UPDATE の使用方法の詳細を調べるのに役立ちます。

MySQL での UPDATE の使用法の詳細を詳しく調べる

要件の背景

最近、古いシステムのデータを新しいシステムに移行するためのデータ移行要件を受けました。旧システムでは移行できませんでした。業務データを再度追加し、新システムで業務を実行します。

移行による影響を軽減するため、データを一括で移行します。新しいシステムは一定期間並行して実行されます。

データは分割されます。バッチは ID 範囲に従って分割されません。つまり、データの各バッチの ID は不規則です。

さらに, 新旧システムのデータの対応を確実にするため、新システムのIDはできる限り旧システムのIDを使用します。古いシステムと新しいシステムでは、移行中に、次のように古いシステムの ID が新しいシステムで占有される可能性があります。

#要件の説明

データを移行するときは、できる限り古いシステムの ID を使用し、競合する ID はバッチで調整する必要があります。

このバッチを調整する方法ID の競合## はまさに私が今達成したいことです# 私の実装では、ビジネス データの増加と現在の新しいシステムの最大 ID に基づいて ID を事前に設定します。開始 ID

この

SQL はどうやって書くのでしょうか?

要件の実現

これは簡単ではないと考える友人もいるかもしれません。 たった5つのデータだけど、こんな感じでできるんじゃないの?

すごくシンプルだけど、伏線がたくさんあって、先生、やり方を知っていますか?

投稿者は突然気づきました: 友人、あなたはとても素晴らしいです

しかし、競合するデータが多数 (数百または数千) ある場合、あなたも一つ一つ変えるの?

あなたが本当にこれを行うなら、私はあなたを本当に尊敬します

もちろん、もっと賢明な友人がいるでしょう

MySQL での UPDATE の使用法の詳細を詳しく調べる それで、私は何をすべきでしょうか?達成?

投稿者はあまり面倒なことはしたくありません。これを実現するには、ローカル変数

UPDATE

を使用し、SQL ## に直接アクセスします。 # 実際のケースを見てみましょう

テーブル tbl_batch_update

# データは次のとおりです。次のように

実行効果は次のとおりです

## アップデート後

## もっと厳密に

それを達成するにはどうすればよいでしょうか?

UPDATE

ORDER

BY もサポートしますか? 以下に示すように、実際にサポートされています。

元の投稿者は通常 UPDATE を使用しますが、それを ORDER BY と組み合わせることはほとんどありません。 LIMIT

と組み合わせたこの試みにより、作成者は UPDATE に慣れていないように感じました。完全な構文はどのようなものになるでしょうか?ゆっくり読んでいきましょう

UPDATE

以下はすべて MySQL 8.0 の公式ドキュメントに基づいています。 UPDATE ステートメント がコンパイルされているため、公式ドキュメントに直接アクセスすることをお勧めします

単一テーブル構文

たくさんの質問がありますか:

##複数のテーブルの構文

##単一テーブル構文と比較すると、Table は単純に見えますが、

ORDER BY および LIMIT

をサポートしていません。 LOW_PRIORITY

UPDATE の修飾子の 1 つで、SQL の優先度を下げるために使用されます。

LOW_PRIORITY

その後、UPDATE の実行は、他のクライアントがテーブルからデータを読み取らなくなるまで遅延されます ただし、テーブル レベルのみです。ロック ストレージ エンジンは

LOW_PRIORITY

のみをサポートします。テーブル レベルのロックのストレージ エンジンには、MyISAMMEMORYMERGE が含まれます。一般的に使用される InnoDB はサポートされていません # 使用シナリオはほとんどありませんが、見慣れたものだけです

#IGNORE

UPDATE

の修飾子の 1 つで、SQL が実行中にエラーを処理する方法を宣言するために使用されます IGNORE が使用されない場合、

UPDATE 実行中にエラーが発生した場合は、以下に示すように中止されます

9002

更新

9003 が生成されると、主キーが競合し、UPDATE 全体が中止され、9000 が更新されます。成功した 9001 はロールバックされます、9003 ~ 9005 はまだ更新されていません。 IGNORE を使用するとどうなりますか?

UPDATE

実行中にエラーが発生しても実行は完了し、影響を受ける行数は最終的にはゼロになります。戻ってきた###

上記で返された影響を受ける行は 2 です。どの 2 つの行が変更されたのか教えていただけますか?

IGNORE の詳細については、次を参照してください。 IGNORE がステートメントの実行に及ぼす影響

使用シナリオ、新旧システム間の並列処理について, データ移行を行うときに使用される可能性があります。主キーまたは一意キーが競合する場合は、

UDPATE に興味がある場合は、

#ORDER BY

を無視してください。 実行プロセスを理解すると理解しやすくなります

UPDATE 実際には 2 つのステージがあります: Check stage更新ステージ

行ごとに処理し、行が

WHERE 句を満たす場合、行を更新します

したがって、ここでの

ORDER BY は、SELECT# の ORDER BY## と同じです。 同じ効果です # 使用シナリオに関しては、前述した需要の背景に戻って確認できます。

IGNORE

ケース 1 実際には、ORDER BY

LIMIT## を使用することもできます。

#LIMIT row_count

句は行一致の制限です。

WHERE 句を満たす row_count 行が見つかると、行が実際に変更されたかどうかに関係なく、ステートメントは すぐに停止します。つまり、 LIMIT

Check フェーズ に限定されており、Update フェーズ

とは何の関係もありません。

##: # の構文には LIMIT との違いがあることに注意してください。 ##SELECT

値 DEFAULT

##UPDATE

SET 句の value は式です。この DEFAULT# が何を意味するのか理解できます。 ## 平均? まずはそのような問題を見てみましょう。列が NOT NULL

と宣言されているが、この列を

# に更新するとします。 ##NULL 何が起こるか##​​#

SQL_MODE を見て、SELECT @@sql_mode; を実行して結果を取得しましょう

STRICT_TRANS_TABLES は、INSERT および UPDATE## に対して厳密モードが有効であることを示します。 # ステートメント value 制御がより厳密になります # 厳密モードをオフにして実行結果を見てみると

#name

フィールド宣言

NOT NULL になります。非厳密 SQL モードでは、name を次のように設定します。 NULL は成功しましたが、変更された値は NULL ではなく、タイプ VARCHAR# のデフォルト値です。 ## : 空の文字列 ('') 概要

1. 厳密な SQL モードでは、 NOT

NULL フィールド設定が NULL の場合、エラーが直接報告され、更新は失敗します。 2. 非 厳密 SQL モードで、NOT

NULL のフィールド設定が NULL の場合、フィールド値はフィールド タイプに設定されます。対応するデフォルト値 フィールド タイプのデフォルト値については、以下を表示できます。 データ タイプのデフォルト値

sql_mode

では、以下を表示できます: サーバー SQL モード

通常、生成環境 MySQL は通常、厳密モードであるため、このモードがあることを誰もが知っていれば十分です

value

DEFAULT SET フィールドの順序

次の SQL

#誰もが非常に明確だと思います

ただし、次の SQL

## の

name

列の値はどうなりますか?

# 結果を見てみましょう

name

の値は少し異なりますか?期待される?

単一テーブル

UPDATE

SET は左から右に実行されますが、複数のテーブル UPDATE ただし、複数のテーブル UPDATE が特定の順序で処理されるとは限りません。概要 1.

UPDATE であっても

DELETE であっても、最初に確認してから処理するというプロセスがあります。見つかった各行

2. 構文 LOW_PRIORITYUPDATE はほとんど使用されず、IGNORE は時々使用され、ORDER BYLIMIT はより頻繁に使用され、どれも見慣れたものです

3. sql_mode の方が重要です 知識ポイントは誰でもマスターすることをお勧めします。運用環境では、厳密モードをオンにすることを強くお勧めします。

元のアドレス: https://www.cnblogs.com/youzhibing/p/16719474.html

著者: Qingshi Lu

[関連する推奨事項: mysql ビデオ チュートリアル ]

以上がMySQL での UPDATE の使用法の詳細を詳しく調べるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。