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 サーバーを構成するための詳細な手順

推薦する

Nginx 構成 クロスドメイン リクエスト Access-Control-Allow-Origin * 詳細な説明

序文403 クロスオリジン エラーが発生しNo 'Access-Control-Allow-...

MySQL インストール図の概要

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

Win10にnginxをインストールする方法

会社から、負荷を実装するためにnginxをベースにFordプロジェクトのWebServiceサーバー...

10分で始めるCSS3アニメーション

導入アニメーションを使用すると、JavaScript や jQuery に依存せずに、純粋な CSS...

WeChatアプレットがフォーム検証を実装

WeChatアプレットフォームの検証、参考までに具体的な内容は次のとおりです。プラグインWxVali...

Google Web Fonts でウェブサイトに無制限のフォントを追加

長い間、リソースの制約により、使用できるフォントが限られていたため、Web サイトの開発は妨げられて...

MySQL 整合性制約の定義と例のチュートリアル

目次整合性制約整合性制約の定義整合性制約の分類主キー制約単一の主キーと複合主キーの違い主キーフィール...

HTML+CSS+jQuery はスクリーンショットで検索ホットリストタブ効果を模倣します

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

時点に基づくMySQLクイックリカバリソリューション

なぜこのような記事を書いたかというと、数日前の夜、仕事が終わろうとしていたときに、業務側で突然、テー...

MySQL監視ツールmysql-monitorの詳細な説明

1. 概要mysql-monitor MYSQL 監視ツール、最適化ツール、1 つの Java Sp...

MySQLデータ復旧のさまざまな方法の概要

目次1. はじめに2. 直接回復2.1 mysqldumpバックアップの完全リカバリ2.2 xtra...

マークアップ言語 - 印刷スタイルシート

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

js での Object.create インスタンスの使用法の詳細な説明

1. Object.create() メソッドを使用して新しいオブジェクトを作成し、既存のオブジェク...

Vueのハッシュジャンプ原理の詳細な説明

目次ハッシュと履歴の違いハッシュ履歴getCurrentLocation の実装setupListe...

Docker-compose インストール db2 データベース操作

db2 データベースをホストマシンに直接インストールするのは面倒で、ユーザーや権限を巻き込むのも不便...