MySQLで論理SQLを置き換える際の落とし穴を回避する方法の詳細な説明

MySQLで論理SQLを置き換える際の落とし穴を回避する方法の詳細な説明

重複キーの置換と挿入の違い

置換の使用法

競合がない場合、挿入と同等となり、他の列のデフォルト値が使用されます。キー競合がある場合、自動インクリメント列が更新され、競合している列が置き換えられ、他の列のデフォルト値が使用されます。
Com_replaceは1を追加します
Innodb_rows_updatedは1を追加します

重複キーでの Insert into … の使用法

競合がない場合は挿入と同等です。他の列のデフォルト値がキーと競合する場合は、該当するフィールドの値のみ更新されます。
Com_insertは1を追加します
Innodb_rows_insertedが1増加する

実験的デモンストレーション

テーブル構造

テーブルhelei1を作成します(
id int(10) 符号なし NOT NULL AUTO_INCREMENT,
名前 varchar(20) NOT NULL DEFAULT ''
年齢 tinyint(3) unsigned NOT NULL デフォルト 0,
主キー(id)、
ユニークキー uk_name (名前)
)
エンジン=innodb AUTO_INCREMENT=1 
デフォルト文字セット=utf8;

テーブルデータ

[email protected] (helei)> helei1 から * を選択します。
+----+-----------+-----+
| ID | 名前 | 年齢 |
+----+-----------+-----+
| 1 | 何磊 | 26 |
| 2 | シャオミン | 28 |
| 3 | シャオホン | 26 |
+----+-----------+-----+
セット内の 3 行 (0.00 秒)

使用法に置き換える

[email protected] (helei)> replace into helei1 (name) values('贺磊');
クエリは正常、2 行が影響を受けました (0.00 秒)
[email protected] (helei)> helei1 から * を選択します。
+----+-----------+-----+
| ID | 名前 | 年齢 |
+----+-----------+-----+
| 2 | シャオミン | 28 |
| 3 | シャオホン | 26 |
| 4 | 何磊 | 0 |
+----+-----------+-----+
セット内の 3 行 (0.00 秒)
[email protected] (helei)> helei1 (name) の値('爱璇') に置き換えます。
クエリは正常、1 行が影響を受けました (0.00 秒)
[email protected] (helei)> helei1 から * を選択します。
+----+-----------+-----+
| ID | 名前 | 年齢 |
+----+-----------+-----+
| 2 | シャオミン | 28 |
| 3 | シャオホン | 26 |
| 4 | 何磊 | 0 |
| 5 | アイシュアン | 0 |
+----+-----------+-----+
セット内の 4 行 (0.00 秒)

置換の使用法

キーの競合がない場合、replace into は insert と同等となり、他の列のデフォルト値が使用されます。

キーの競合が発生すると、自動増分列が更新されて競合する列が置き換えられ、残りの列はデフォルト値に設定されます。

重複キーに…を挿入:

[email protected] (helei)> helei1 から * を選択します。
+----+-----------+-----+
| ID | 名前 | 年齢 |
+----+-----------+-----+
| 2 | シャオミン | 28 |
| 3 | シャオホン | 26 |
| 4 | 何磊 | 0 |
| 5 | アイシュアン | 0 |
+----+-----------+-----+
セット内の 4 行 (0.00 秒)
[email protected] (helei)> insert into helei1 (name,age) values('贺磊',0) on duplicate key update age=100;
クエリは正常、2 行が影響を受けました (0.00 秒)
[email protected] (helei)> helei1 から * を選択します。
+----+-----------+-----+
| ID | 名前 | 年齢 |
+----+-----------+-----+
| 2 | シャオミン | 28 |
| 3 | シャオホン | 26 |
| 4 | 何磊 | 100 |
| 5 | アイシュアン | 0 |
+----+-----------+-----+
セット内の 4 行 (0.00 秒)
[email protected] (helei)> helei1 から * を選択します。
+----+-----------+-----+
| ID | 名前 | 年齢 |
+----+-----------+-----+
| 2 | シャオミン | 28 |
| 3 | シャオホン | 26 |
| 4 | 何磊 | 100 |
| 5 | アイシュアン | 0 |
+----+-----------+-----+
セット内の 4 行 (0.00 秒)
[email protected] (helei)> insert into helei1 (name) values('爱璇') on duplicate key update age=120;
クエリは正常、2 行が影響を受けました (0.01 秒)
[email protected] (helei)> helei1 から * を選択します。
+----+-----------+-----+
| ID | 名前 | 年齢 |
+----+-----------+-----+
| 2 | シャオミン | 28 |
| 3 | シャオホン | 26 |
| 4 | 何磊 | 100 |
| 5 | 愛軒 | 120 |
+----+-----------+-----+
セット内の 4 行 (0.00 秒)
[email protected] (helei)> 重複キーの helei1 (name) 値に ('存在しません') を挿入し、age=80 を更新します。
クエリは正常、1 行が影響を受けました (0.00 秒)
[email protected] (helei)> helei1 から * を選択します。
+----+-----------+-----+
| ID | 名前 | 年齢 |
+----+-----------+-----+
| 2 | シャオミン | 28 |
| 3 | シャオホン | 26 |
| 4 | 何磊 | 100 |
| 5 | 愛軒 | 120 |
| 8 | 存在しない | 0 |
+----+-----------+-----+
セット内の行数は 5 です (0.00 秒)

要約する

replace into の使用は、最初に削除操作を実行し、競合するキーが見つかった場合は挿入操作を実行することと同じです。指定されていない列にはデフォルト値が使用されます。これにより、自動増分主キーが変更されます。テーブルに外部キーがある場合、またはビジネス ロジックが主キーに依存している場合は、例外が発生します。したがって、重複キーには Insert into … を使用することをお勧めします。執筆時間が急ぎだったため、記事には多少の誤りや不正確な点が避けられません。不適切な点がありましたら、ご指摘、ご訂正をお願いいたします。

さて、以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただきありがとうございます。

以下もご興味があるかもしれません:
  • MySQLの論理アーキテクチャに関する深い理解
  • MYSQLストアドプロシージャ、つまり一般的な論理知識のポイントの要約
  • MySQL 上級学習ノート (パート 3): MySQL 論理アーキテクチャの紹介、MySQL ストレージ エンジンの詳細な説明
  • MySQLの実行原理、論理階層化、データベース処理エンジンの変更について詳しく説明します
  • Mysql論理アーキテクチャの詳細な説明
  • PHPを使用してMySqlデータベースにアクセスする論理操作と追加、削除、変更、チェックの例
  • MySql ストアド プロシージャの論理的判断と条件制御
  • MySQLはテーブルデータを復元するためにfrmファイルとibdファイルを使用します
  • MySQLはデータ復旧を実装するためにbinlogログを使用する
  • 時点に基づくMySQLクイックリカバリソリューション
  • MySQL5.7 mysqldump バックアップとリカバリの実装
  • MySQL 論理バックアップとリカバリ テストの概要

<<:  Nginx で https をアップグレードする方法

>>:  JavaScript における正規表現の実際的な応用の詳細な説明

推薦する

Hadoop 2.x と 3.x の 22 ポイントの比較、Hadoop 3.x の 2.x に対する改善点

質問ガイド1. Hadoop 3.x はどのようにして障害を許容するのでしょうか? 2. Hadoo...

MySQL 無料インストール版 (zip) のインストールと設定の詳細なチュートリアル

この記事では、MySQL無料インストール版(zip)のインストールと設定のチュートリアルを参考までに...

HTML で相対パスを使用してディレクトリのすべてのレベルのファイルを取得する方法の詳細な説明

相対パスの概念現在のファイルの場所を参照ポイントとして使用して、ターゲット ファイルへのパスを確立し...

データ型の判断における js typeof と instanceof の違いと、その開発と使用について

目次1. typeof演算子2. インスタンスオブ演算子3. typeof と instanceof...

Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)

現在、新しいアプリプロジェクトを開発中です。私にとっても初めてのアプリ開発です。チームで調査と検討を...

jQueryはフォーム検証を実装する

jQueryを使用してフォーム検証を実装します。参考までに、具体的な内容は次のとおりです。登録.ht...

トリガーメソッドを使用して、ファイルタイプの入力をクリックせずにポップアップファイル選択ダイアログボックスを実現します。

トリガー メソッドを使用できます。JavaScript にはネイティブのトリガー関数はありません。自...

Linux RabbitMQ クラスタ構築プロセス図

1. 全体的な手順冒頭で、RabbitMQ サービスをインストールして実行する方法を紹介しましたが、...

js 正確な計算

var numA = 0.1; var numB = 0.2; アラート(numA + numB)...

HTML の marquee 属性の詳細な説明

このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルでのみサポートされているため、IEカ...

Centos 7 mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar の簡単な分析

Baiduクラウドディスク:リンク: https://pan.baidu.com/s/1hv5rUW...

CocosCreator ソースコードの解釈: エンジンの起動とメインループ

目次序文準備行く!文章プロセスを開始するメインループまとめ要約する序文準備皆さんは、こんなことを考え...

Web 開発の面接と筆記試験に必須の知識(必読)

HTML のインライン要素とブロックレベル要素の違い:標準的なドキュメント フローでは、ブロック ...

Nodejs のグローバル変数とグローバルオブジェクトの知識ポイントと使用方法の詳細

1. グローバルオブジェクトすべてのモジュールは呼び出すことができます1) global: ブラウザ...

ウェブサイトに天気予報を挿入する方法

天気予報をウェブサイトに挿入すると、次のような効果が得られます。次のコードを挿入する必要があります:...