MySQLに挿入する前にデータが存在するかどうかを確認する方法

MySQLに挿入する前にデータが存在するかどうかを確認する方法

ビジネスシナリオ: 訪問者の訪問状況を記録する必要があるが、繰り返し記録することはできない

挿入する前に、挿入するデータが存在するかどうかを判断できます。ビジネス コードは次のとおりです。

t_topic_vistor(user_id,topic_code)に挿入し、'218'を選択します。 
'XQ33019920170811142528217' が存在しない DUAL から(SELECT * 
t_topic_vistorからuser_id = 218で 
トピックコード='XQ33019920170811142528217')

構文は次のとおりです。

テーブルにINSERT INTO(フィールド1, フィールド2, フィールドn) SELECT 'フィールド1', 
'field2', 'fieldn' FROM DUAL WHERE NOT EXISTS(SELECT field FROM 
テーブル WHERE フィールド = ?)

追加知識: MySql は存在しない場合は挿入し、存在する場合は更新または無視します。

序文

データを挿入するときに、重複データを無視または置換する必要がある場合があります (特定のフィールドに基づいて)。これはアプリケーション層で処理することも、複雑な SQL ステートメントを使用して処理することもできます (簡単な SQL 構文しか知らない場合)。もちろん、簡単な SQL 構文を使用することもできますが、すべてのデータベース タイプに共通というわけではありません。

以下の例はすべて MySQL 専用であり、他のデータベースに自由に使用することはできません。

テーブル名: 学生

テーブルフィールド:

列名主キー自動増分個性的
id真実真実
名前真実

初期テーブルデータ:

id名前
1ジャック18

注: 以下のすべての例では、挿入するデータに UNIQUE インデックスまたは PRIMARY KEY フィールドが存在する必要があります。ここでテーブルの主キー ID が導入され、自動増分に設定されています。後でその変更を確認できます。

1. 存在しない場合は挿入し、存在する場合は更新する

重複キーの更新に関する 1.1

挿入されたデータによって UNIQUE インデックスまたは PRIMARY KEY で競合/重複が発生する場合は、次のように UPDATE ステートメントを実行します。

`student`(`name`, `age`) VALUES('Jack', 19) に INSERT します
 重複キーについて 
 UPDATE `age`=19; -- 競合が発生する場合は、更新ステートメントが実行されます

-- 2 行が影響を受けています

ここで影響を受ける行数は 2 です。これは、データベースに name='Jack' のデータがあるためです。このデータが存在しない場合、影響を受ける行数は 1 です。

最新のテーブルデータは次のとおりです。

id名前
1ジャック19

1.2 を置き換える

挿入されたデータによって UNIQUE インデックスまたは PRIMARY KEY で競合/重複が発生する場合は、まず古いデータを削除してから最新のデータを挿入します。例:

`student`(`name`, `age`) VALUES('Jack', 18) に置き換えます。

-- 2 行が影響を受けています

ここで影響を受ける行数は 2 です。これは、データベースに name='Jack' のデータがあるためです。また、最初に古いデータを削除してからデータを挿入するため、id の値は 2 になります。最新のテーブル データは次のとおりです。

id名前
2ジャック19

2. 重複挿入を避ける

キーワード/文: insert ignore into、挿入されたデータが UNIQUE インデックスまたは PRIMARY KEY で競合/重複を引き起こす場合、操作は無視され、データは挿入されません。例:

`student`(`name`, `age`) VALUES('Jack', 18) に IGNORE を挿入します。

-- 0 行が影響を受けました

ここには name='Jack' のデータがすでに存在するため、新しく挿入されたデータは無視され、影響を受ける行数は 0 となり、テーブル データは変更されません。

MySQLに挿入する前にデータが存在するかどうかを判断する上記の操作は、エディターが皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL でレコードが存在しない場合に挿入し、存在する場合に更新する方法を実装する方法
  • レコードが存在する場合は更新し、存在しない場合は挿入するmysql sql
  • mysql insert は存在​​する場合は挿入しません 構文の説明

<<:  Dockerコンテナの状態変換の実装

>>:  HTML における if 判断の使用

推薦する

ウェブサイトのコンテンツが検索エンジンに含まれないようにする方法

通常、Web サイトを構築する目的は、検索エンジンにインデックス登録してもらい、プロモーションを拡大...

JS を使用して要素が配列であるかどうかを判断する例

検証できるデータの種類は次のとおりです a = [1,2,3,4,5,6]とします。 b = [とし...

Zabbixを使用してOracleテーブルスペースの操作プロセスを監視する

0. 概要Zabbix は非常に強力なオープンソースの監視ツールです。以下では、Zabbix がテー...

hrefを使用すると、リンクをクリックするだけでページ上の特定の場所にジャンプできます。

ページ内の a タグをクリックした後、ページ内の対応する場所にジャンプするようにします。方法は非常に...

(MariaDB) MySQL のデータ型とストレージメカニズムの包括的な説明

1.1 データ型の概要データ型は、各フィールドに保存できるデータの種類、保存できるデータの量、保存で...

JS は Web ページナビゲーションバーの特殊効果を実現します

この記事では、ネイティブ JS を使用して実装された実用的な Web ナビゲーション バー効果を紹介...

クリエイティブな会社概要ウェブページデザイン

ユニークな「About」ページ自分を他の人たちと差別化する素晴らしい方法は、本当にユニークな自己紹介...

Docker コンテナの uid と gid の詳細な理解

デフォルトでは、コンテナ内のプロセスは root ユーザー権限で実行され、この root ユーザーは...

Vue実装のカウンターケース

この記事では、カウンター表示を実現するためのVueの具体的なコードを例として紹介します。具体的な内容...

Navicat が MySQL にリモート接続するときに発生する 10060 不明エラーを解決する方法

はじめに:今日は、サーバー上のMySQLにリモート接続したいと思います。使用するソフトウェアはNav...

Dockerを使用してクローンリポジトリを使用してGitイメージを構築する

概要私は 1 年以上 Docker を使用しています。最近、サービスをすばやくオーケストレーションし...

MySQL が暗黙のデフォルト値を処理する方法

何人かの学生は、マスターとスレーブの間の不一致の問題に遭遇したと述べました。一般的な状況としては、m...

VMware に Centos7 をインストールした後に外部ネットワークに ping できない問題を解決する

クラスターを構成する際に問題が発生しました。当初は 3 台の仮想マシンすべてが外部ネットワークに p...

JSにおけるnewの原理と実装について詳しく話しましょう

目次意味コンストラクタ本体は異なる戻り値なし戻りオブジェクト非オブジェクトを返すプロパティバインディ...

CocosCreator Typescriptでテトリスゲームを作る

目次1. はじめに2. 解決すべきいくつかの重要な問題3.最後に書く1. はじめに最近、Cocos ...