MySQL DMLステートメントの使用に関する詳細な説明

MySQL DMLステートメントの使用に関する詳細な説明

序文:

前回の記事では、注意深い学生であれば発見できたかもしれない DDL ステートメントの使用法を中心に紹介しました。この記事では、DML ステートメントに焦点を当て、テーブル データに関連する操作について説明します。

ここでは、DDL 文と DML 文の分類について説明します。一部の受講者には、このことがよくわからないかもしれません。

DDL (データ定義言語): データベースまたはテーブルの構造を作成、削除、変更したり、データベースまたはテーブルの構造を操作するために使用されるデータ定義言語。一般的なものとしては、create、alter、drop などがあります。

DML (データ操作言語): 主にテーブル レコードを更新 (追加、削除、変更) するために使用されるデータ操作言語。一般的なものとしては、挿入、更新、削除などがあります。

1. データを挿入する

挿入構文は主にデータを挿入するために使用されます。公式ドキュメントにも多くのオプションが提供されています。

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_name [,partition_name] ...)] [(col_name [,col_name] ...)] {VALUES | VALUE} (value_list) [, (value_list)] ... [ON DUPLICATE KEY UPDATE assignment_list]
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_name [,partition_name] ...)] SET assignment_list [ON DUPLICATE KEY UPDATE assignment_list]
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_name [,partition_name] ...)] [(col_name [,col_name] ...)] SELECT ... [ON DUPLICATE KEY UPDATE assignment_list]
値: {expr | DEFAULT}
value_list: 値 [, 値] ...
割り当て: col_name = 値
assignment_list: 割り当て [, 割り当て] ...

興味のある学生は上記のオプションを参照して勉強することができます。以下では、よく使用される構文をいくつかカテゴリ別に紹介します。

... 値に挿入 (...)

これはおそらく、挿入ステートメントを記述する最も一般的な方法です。標準的な使用法は次のとおりです。

INSERT INTO <テーブル名> [ <列名 1> [ 、 … <列名 n>] ]VALUES (値 1) [… 、 (値 n) ];
テーブルに INSERT INTO (列1、列2...)VALUES (値1、値2、...)、(値1、値2、...)、...;

構文は次のとおりです。

  • <テーブル名>: 操作対象となるテーブルの名前を指定します。
  • <列名>: データを挿入する必要がある列名を指定します。テーブルのすべての列にデータを挿入する場合は、すべての列名を省略し、INSERT <テーブル名> VALUES(…) を直接使用できます。
  • VALUES または VALUE 句: この句には、挿入するデータのリストが含まれます。データ リスト内のデータの順序は、列の順序と一致する必要があります。

挿入...設定...

insert ... set ステートメントは、一度に 1 つのデータのみを挿入できます。テーブルにいくつかの列の値を挿入できるため、より柔軟です。

INSERT INTO <テーブル名> SET <列名 1> = <値 1>、<列名 2> = <値 2>、…

挿入...選択...

INSERT INTO…SELECT…FROM ステートメントは、1 つ以上のテーブルからデータをすばやく取得し、そのデータを行データとして別のテーブルに挿入するために使用されます。

SELECT 句はクエリ結果セットを返し、INSERT ステートメントは、この結果セットを指定されたテーブルに挿入します。結果セット内の各データ行のフィールド数とデータ型は、操作対象のテーブルとまったく同じである必要があります。

たとえば、テスト テーブルと test_bak テーブルの構造が同じで、テスト テーブルのデータを test_bak テーブルに挿入する場合は、次のようにします。

test_bakに挿入し、testから*を選択します。

重複キーの更新時に挿入...

挿入する新しい行が主キー (PRIMARY KEY) または UNIQUE 制約に違反する場合、MySQL はエラーを報告します。この構文は、このエラーを解決するためのものです。データベースにレコードが存在する場合、このステートメントを実行するとレコードが更新され、存在しない場合はレコードが挿入されます。

効果を示す例を以下に示します。

CREATE TABLE `student` ( `xuehao` int(11) 主キー、 `name` varchar(255) DEFAULT NULL、 `age` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> select * from student;+--------+------+------+| xuehao | name | age |+--------+------+------+| 1001 | aaa | 18 || 1002 | bbb | 19 || 1003 | ccc | 20 |+--------+------+------+
DUPLICATE KEY UPDATE age = 19 の学生 (xuehao、名前、年齢) の値 (1003、 'ccc'、19) に挿入します。
mysql> select * from student;+--------+------+------+| xuehao | name | age |+--------+------+------+| 1001 | aaa | 18 || 1002 | bbb | 19 || 1003 | ccc | 19 |+--------+------+------+
学生セット age = 19 を更新します。xuehao = 1003 です。

... 値に置き換えます ...

replace into は insert と似ていますが、replace into は最初にテーブルにデータを挿入しようとする点が異なります。1. データ行がテーブルに既に存在することが判明した場合 (主キーまたは一意のインデックスに基づく)、データ行を削除してから新しいデータを挿入します。 2. それ以外の場合は、新しいデータを直接挿入します。

例を挙げて説明しましょう:

mysql> select * from student;+--------+------+------+| xuehao | name | age |+--------+------+------+| 1001 | aaa | 18 || 1002 | bbb | 19 || 1003 | ccc | 19 |+--------+------+------+
学生の値に置き換えます(1003、 'ccc'、17);
mysql> select * from student;+--------+------+------+| xuehao | name | age |+--------+------+------+| 1001 | aaa | 18 || 1002 | bbb | 19 || 1003 | ccc | 17 |+--------+------+------+

2. データを更新する

更新ステートメントはテーブルデータを更新するために使用されます。公式に推奨される構文は次のとおりです。

UPDATE [LOW_PRIORITY] [IGNORE] テーブル参照 SET 割り当てリスト [WHERE where_condition] [ORDER BY ...] [LIMIT 行数]
値: {expr | DEFAULT}
割り当て: col_name = 値
assignment_list: 割り当て [, 割り当て] ...

同様に、ここでは一般的に使用される単一テーブル更新構文のみを紹介します。

UPDATE <テーブル名> SET フィールド1=値1 [,フィールド2=値2…] [WHERE句][ORDER BY句] [LIMIT句]

構文は次のとおりです。

  • <テーブル名>: 更新するテーブルの名前を指定するために使用されます。
  • SET 句: テーブル内で変更する列名と列値を指定するために使用されます。指定された各列の値は、式または列に対応するデフォルト値にすることができます。デフォルト値が指定されている場合は、キーワード DEFAULT を使用して列の値を表すことができます。
  • WHERE 句: オプション。変更するテーブル内の行を制限するために使用されます。指定しない場合は、テーブル内のすべての行が変更されます。
  • ORDER BY 句: オプション。テーブル内の行が変更される順序を制限するために使用されます。
  • LIMIT 句: オプション。変更する行の数を制限するために使用されます。

3. データを削除する

delete ステートメントはテーブル データを削除するために使用されます。公式ドキュメントでは次の構文が推奨されています。

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (partition_name [,partition_name] ...)] [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

単一のテーブルからデータを削除するには、DELETE ステートメントを使用します。構文は次のとおりです。

DELETE FROM <テーブル名> [WHERE句] [ORDER BY句] [LIMIT句]

構文は次のとおりです。

  • <テーブル名>: データを削除するテーブル名を指定します。
  • ORDER BY 句: オプション。削除する場合、テーブル内の行は句で指定された順序で削除されます。
  • WHERE 句: オプション。削除操作の削除条件が制限されていることを示します。この句を省略すると、テーブル内のすべての行が削除されることを意味します。
  • LIMIT 句: オプション。制御がクライアントに返される前に削除される行の最大数をサーバーに通知するために使用されます。

要約:

この記事では、主に 3 つの DML ステートメントの構文を紹介します。これらは単純に見えますが、さまざまなオプションは実際には非常に複雑であり、特に挿入ステートメントには頻繁に使用されるオプションが多数あります。ここで、更新または削除ステートメントを実行する際には注意が必要であることもお知らせします。where 条件を使用しないと、すべてのデータが更新または削除されます。

上記はMySQL DML文の使用に関する詳細な説明です。MySQL DML文の詳細については、123WORDPRESS.COMの他の関連記事にご注目ください。

以下もご興味があるかもしれません:
  • MySQL DML ステートメントの概要
  • MySQL データ操作 - DML ステートメントの使用
  • MySQL 基本チュートリアル: DML ステートメントの詳細な説明

<<:  jsを使ってシンプルなディスククロックを実現する

>>:  IDEA 2020 で Tomcat サーバーを構成するための詳細な手順

推薦する

Docker で FastDFS をデプロイする方法

Dockerにfastdfsをインストールするディレクトリをマウント-v /e/fdfs/トラッカー...

タイムスタンプの差を計算するSQLメソッド

タイムスタンプの差を計算するSQLメソッド概要場合によっては、特定のレコードを時間で検索する必要があ...

JavaScriptで計算機機能を実現するプロセスの詳細な説明

目次1. 電卓機能の紹介2. 計算機ページのデザイン1. ナビゲーションバー2. データ部分3. i...

クエリでのMySQLのユニークキーの使用と関連する問題

1. テーブルステートメントを作成します。 テーブル「従業員」を作成します( `emp_no` in...

Windows DNS サーバーに「ワームレベル」の脆弱性が露呈、17 年間存在

脆弱性の紹介SigRed の脆弱性はワーム化可能であるため非常に危険です。つまり、ユーザーの介入なし...

Web2.0製品と機能の簡単な紹介

<br />Web2.0とは何ですか? Web2.0にはソーシャルネットワーク製品とその...

Linux で Apache を使用してファイル サーバーを構築する手順

1. ファイルサーバーについてプロジェクトでは、公開ソフトウェアやデータをプロジェクト チーム メン...

OR キーワードを使用した MySql 複数条件クエリ ステートメント

前の記事では、And キーワードを使用した MySql の複数条件クエリ ステートメントを紹介しまし...

nginxでの共有メモリの使用に関する詳細な説明

nginx プロセス モデルでは、トラフィック統計、トラフィック制御、データ共有などのタスクを完了す...

期間限定フラッシュセール機能を実装するJavaScript

この記事では、期間限定フラッシュセール機能を実装するためのJavaScriptの具体的なコードを参考...

Vue で video.js を使用して m3u8 形式のビデオを再生する方法

目次1. インストール2. videojsの紹介3. コンポーネントでのテストと使用1. 基本的な自...

Linux システムで Centos7 を使って ElasticSearch ミドルウェアと共通インターフェースを構築するデモ

1. ミドルウェアの紹介1. 基本概念ElasticSearch は Lucene をベースにした検...

Linux サーバーに埋め込まれた ddgs および qW3xT.2 マイニング ウイルスの対処の実践記録

序文仮想通貨の狂気的な投機により、マイニングウイルスは犯罪者が最も頻繁に使用する攻撃方法の 1 つに...

ウェブページの読み込み速度を上げる簡単なヒント

Web ページの読み込み速度は、Web サイトの品質を評価するための重要な指標です。その理由は、ほと...