MySQL UPDATE ステートメントの非標準実装コード

MySQL UPDATE ステートメントの非標準実装コード

今日は、MySQL データベースと SQL 標準 (および他のデータベース) の UPDATE ステートメントの違いを紹介します。この問題に注意を払わないと、予期しない結果につながる可能性があります。

まず、簡単なサンプル テーブルを作成しましょう。

テーブルt1を作成します(
 id int、 
 列1 int, 
 列2 int
); 

t1 値 (1, 1, 1) に挿入します。

t1から*を選択します。
id|列1|列2|
--|----|----|
 1| 1| 1|
————————————————
著作権声明: この記事は、CSDN ブロガー「髪を切らないトニー先生」によるオリジナル記事であり、CC 4.0 BY-SA 著作権契約に準拠しています。転載の際は、元のソース リンクとこの声明を添付してください。
オリジナルリンク: https://blog.csdn.net/horses/article/details/110238573CREATE TABLE t1(
 id int、 
 列1 int, 
 列2 int
); 

t1 値 (1, 1, 1) に挿入します。

t1から*を選択します。
id|列1|列2|
--|----|----|
 1| 1| 1|

次に、テーブル t1 のデータを更新します。

アップデート t1 
SET col1 = col1 + 1、
  列2 = 列1
ここで、id = 1;

列1、列2を選択 
t1から;

クエリ ステートメントによって返される col1 フィールドと col2 フィールドの結果は何ですか?

  • SQL 標準とその他のデータベース実装の場合、結果はそれぞれ21 になります。
  • しかし、MySQL では結果はそれぞれ22 になります。

MySQL の場合、UPDATE ステートメントが式 (col2 = col1) で以前に更新された列 (col1) を使用する場合、元の値 (1) の代わりに列の更新された値 (2) が使用されます。

MySQL でのこの実装は SQL 標準とは異なることに注意してください。また、実装が SQL 標準に準拠している Oracle、Microsoft SQL Server、PostgreSQL、SQLite などの他のデータベースもテストしました。

MySQL で標準 SQL と同じ効果を実現したい場合は、UPDATE ステートメントで更新されるフィールドの順序を調整できます。例えば:

アップデート t1 
SET col2 = col1、
  列1 = 列1 + 1
ここで、id = 1;

この方法では、col1 の古い値 (1) を使用して、col2 列が col1 の前に更新され、結果は SQL 標準と一致します。

結論: 一般に、UPDATE ステートメントを記述する場合、複数のフィールドの更新順序を気にする必要はありません。ただし、MySQL の実装の問題により、文法の順序に注意する必要があります。

これで、MySQL UPDATE ステートメントの非標準実装に関するこの記事は終了です。MySQL UPDATE ステートメントに関連する非標準コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 実用的な MySQL + PostgreSQL バッチ挿入更新 insertOrUpdate
  • MySQL 更新セットとの違い
  • mysql 更新ケース更新フィールド値が固定されていない操作
  • Mysql 更新マルチテーブル共同更新方法の概要
  • 更新とデータ整合性処理のためのMySQLトランザクション選択の説明
  • MySQL UPDATE ステートメントの「典型的な」落とし穴

<<:  シェルスクリプトは、Docker の半自動コンパイル、パッケージ化、およびリリースアプリケーション操作を構築します。

>>:  Vue は無限ロードウォーターフォールフローを実装します

推薦する

現在のマウススライドの座標を取得するVue+openlayer5メソッド

序文: Vue プロジェクトで現在のマウスの座標を取得するにはどうすればよいでしょうか。ここで共有す...

MySQL セレクトキャッシュメカニズムの使用に関する詳細な説明

MySQL クエリ キャッシュはデフォルトでオンになっています。ある程度、クエリの効果は向上しますが...

Vueプロジェクトでコンポーネントをカプセル化する簡単な手順

目次序文Toastコンポーネントをカプセル化する方法ユースケース具体的な実装要約する序文ビジネスが発...

Winにmysqlをインストールする詳細な手順

この記事では、参考までにWinにmysqlをインストールする詳細な手順を紹介します。具体的な内容は次...

MySQL でサーバーのインストールを開始できない場合の解決策について簡単に説明します。

コンピュータに初めて MySQL をインストールする場合、通常このエラー メッセージは表示されません...

HTML でカスタム画像を使用してチェックボックスを表示する方法

チェックボックスの使用を実装するために画像を使用する必要がある場合は、それを使用して実装できます。実...

MySQL における IF()、IFNULL()、NULLIF()、および ISNULL() 関数の使用に関する詳細な説明

MySQL では、IF()、IFNULL()、NULLIF()、および ISNULL() 関数を使用...

MySQL 8.0.15 のインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...

セマフォによるTomcatの異常終了の解決方法

最近はビッグデータで遊んでいます。友人が私のところに来て、オンラインの Tomcat が不可解に終了...

CSS 境界線の半分または部分的に表示される実装コード

1. 疑似クラスを使用して境界線の半分を表示する <!DOCTYPE html> <...

ノードの対応するバージョンに関する簡単な説明 node-sass sass-loader

目次ノードのバージョンが一致しない、ノードをアップグレードまたはダウングレードするnvm を使用して...

CSS 極座標のサンプルコード

序文このプロジェクトには、衛星測位用のグラフィックスを含むチャートの要件があり、北半球または南半球の...

ページコンテンツ全体を中央に配置して、高さがコンテンツに合わせて自動的に拡張されるようにする方法

ページコンテンツ全体を中央に配置する方法と、コンテンツに合わせて高さを自動的に拡大縮小する方法。これ...

dockerを使用してGrafana+Prometheus構成をデプロイする

docker-compose-monitor.yml バージョン: '2' ネットワ...

Linuxシステムの操作レベルの詳細な紹介

目次1. Linuxシステムの操作レベルの概要2. 実行レベルを確認する3. 現在のシステムの動作レ...