MySQL データ操作 - DML ステートメントの使用

MySQL データ操作 - DML ステートメントの使用

例示する

DML(データ操作言語)とは、データベースの追加、削除、変更を行うための操作命令のことです。主にINSERT、UPDATE、DELETEの3種類があり、それぞれ挿入、更新、削除を表します。これはMySQLを学習する際に必ず習得しなければならない基礎知識です。

構文中の[]内の内容は省略できます。

INSERT操作

行ごとに挿入

構文の形式は次のとおりです。

 t_name[(column_name1,columnname_2,...)]に値(val1,val2)を挿入します。
 または、t_name に挿入して、column_name1 = val1、column_name2 = val2 を設定します。

1. フィールド名と値は、数、タイプ、位置が一貫している必要があります。一致していない場合は例外が発生する可能性があります。

2. 非 null フィールドに挿入された値が必要です。そうでない場合は、非 null 例外メッセージが報告されます。 null を許可するフィールドにデータを入力しない場合は、フィールドも値も表示されないか、値が null に置き換えられます。

3. 数値型の場合、値を一重引用符で囲む必要はありません。文字型や日付型などの他の型の場合、値を一重引用符で囲む必要があります。

4. テーブル名の後のcolumn_nameを省略すると、テーブルのすべてのフィールドをカバーすることを意味します。値の順序はテーブル内のフィールドの順序と一致している必要があります。

5. 上記の 2 番目の文法は記述が複雑で、現在ではほとんど使用されていません。

テストしてみましょう:

mysql> desc `user1`;
+---------+--------------+------+-----+---------+----------------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+---------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| 名前 | varchar(20) | NO | | NULL | |
| 年齢 | int(11) | いいえ | | 0 | |
| アドレス | varchar(255) | はい | | NULL | |
+---------+--------------+------+-----+---------+----------------+
4行セット

mysql> `user1`(name,age,address) に値 ('brand',20,'fuzhou') を挿入します。
クエリは正常、1 行が影響を受けました

mysql> `user1`(age,address) に値(20,'fuzhou') を挿入します。
1364 - フィールド「name」にデフォルト値がありません

mysql> `user1` に値 ('sol'、21、'xiamen') を挿入します。
1136 - 列数が行 1 の値数と一致しません

mysql> `user1` に値(null、'sol'、21、'xiamen')を挿入します。
クエリは正常、1 行が影響を受けました

mysql> `user1` から * を選択します。
+----+-------+-----+---------+
| ID | 名前 | 年齢 | 住所 |
+----+-------+-----+---------+
| 3 | ブランド | 20 | 福州 |
| 4 | ソル | 21 | 厦門 |
+----+-------+-----+---------+
2行セット

バッチ挿入

構文の形式は次のとおりです。

 t_name [(column_name1,column_name2)] に値 (val1_1,val1_2),(val2_1,val2_2)... を挿入します。
 または、t_name [(column_name1,column_name2)] に挿入し、o_name1,o_name2 を o_t_name [where condition] から選択します。

1. 上記の最初の構文では、values の後の値の数は、一致する列の数と等しくする必要があります。データ挿入の効率を向上させるために、カンマで区切られた複数の値を設定できます。

2. 2 番目の構文では、選択クエリ内のフィールドの数、順序、およびタイプと、挿入されたデータ内のフィールドが一致している必要があります。挿入フィールドは省略可能で、その場合 t_name テーブルのすべてのフィールドが挿入されます。条件はオプションです。

テストしてみましょう:

mysql> `user1`(name,age,address) に値 ('brand',20,'fuzhou'),('sol',21,'xiamen') を挿入します。
クエリは正常、2 行が影響を受けました
記録: 2 重複: 0 警告: 0

mysql> `user1` から * を選択します。
+----+-------+-----+---------+
| ID | 名前 | 年齢 | 住所 |
+----+-------+-----+---------+
| 5 | ブランド | 20 | 福州 |
| 6 | ソル | 21 | 厦門 |
+----+-------+-----+---------+
2行セット
mysql> desc `user2`;
+---------+--------------+------+-----+---------+----------------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+---------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| 名前 | varchar(20) | NO | | NULL | |
| 年齢 | int(11) | いいえ | | 0 | |
| アドレス | varchar(255) | はい | | NULL | |
| 性別 | int(11) | いいえ | | 1 | |
+---------+--------------+------+-----+---------+----------------+
5行セット

mysql> `user2` (name,age,address,sex) に挿入します。`user1` から name,age,address,null を選択します。
クエリは正常、2 行が影響を受けました
記録: 2 重複: 0 警告: 0

mysql> `user2` から * を選択します。
+----+-------+-----+--------+------+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+--------+------+
| 7 | ブランド | 20 | 福州 | 1 |
| 8 | ソル | 21 | 厦門 | 1 |
+----+-------+-----+--------+------+
2行セット

更新操作

データ更新

構文の形式は次のとおりです。

t_nameを更新[[as] alias] [alias.]column_name1 = val1,[alias.]column_name2 = val2 [where condition]を設定します。

1. エイリアスは別名を意味します。エイリアスが簡単であればあるほど、認識性が向上します。識別しやすく、操作が便利です。エイリアスがない場合は、テーブル名がエイリアスになります。

2. as エイリアスの as もオプションであり、where 条件もオプションであるため、ユーザーは更新のために特定の条件を満たす必要なデータを選択できます。

テストしてみましょう:

mysql> `user2` から * を選択します。
+----+-------+-----+--------+------+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+--------+------+
| 7 | ブランド | 20 | 福州 | NULL |
| 8 | ソル | 21 | 厦門 | NULL |
+----+-------+-----+--------+------+
2行セット

mysql> `user2` を u2 として更新します。u2.name = 'hero'、u2.age=23、u2.sex=1、id=7 を設定します。
クエリは正常、1 行が影響を受けました
一致した行: 1 変更された行: 1 警告: 0

mysql> `user2` から * を選択します。
+----+------+-----+--------+------+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+------+-----+--------+------+
| 7 | ヒーロー | 23 | 福州 | 1 |
| 8 | ソル | 21 | 厦門 | NULL |
+----+------+-----+--------+------+
2行セット

別の方法としては、異なるエイリアスといくつかの制限条件を使用して、複数のテーブルを同時に更新する方法があります。ただし、エラーが発生しやすく、保守が難しいため、この方法はお勧めできません。

削除操作

削除方法

構文の形式は次のとおりです。

delete [alias] from t_name [[as] alias] [where condition];

1. 上記のように、alias は別名を表します。別名がない場合は、テーブル名が別名になります。

2. テーブルに別名がある場合は、削除コマンドの後に別名を続ける必要があります。そうしないと、データベースは例外を報告します。

テストしてみましょう:

mysql> `user2` から * を選択します。
+----+------+-----+--------+------+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+------+-----+--------+------+
| 7 | ヒーロー | 23 | 福州 | 1 |
| 8 | ソル | 21 | 厦門 | NULL |
+----+------+-----+--------+------+
2行セット

mysql> エイリアスとして `user2` から削除します。性別は 1 です。
1064 - SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の 'as alias where sex=1' の近くで使用する正しい構文を確認してください。

mysql> `user2` から、sex=1 のエイリアスを削除します。
クエリは正常、1 行が影響を受けました

mysql> `user2` から * を選択します。
+----+------+-----+--------+------+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+------+-----+--------+------+
| 8 | ソル | 21 | 厦門 | NULL |
+----+------+-----+--------+------+
セット内の1行

3. テーブル内のすべてのデータを削除する場合は、最後に where 条件を含める必要はありませんが、注意して使用してください。

mysql> `user2` から * を選択します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 8 | ソル | 21 | 厦門 | 0 |
| 10 | ブランド | 21 | 福州 | 1 |
| 11 | ヘレン | 20 | 泉州 | 0 |
+----+-------+-----+----------+-----+
3行セット

mysql> `user2` から削除します。
クエリは正常、3 行が影響を受けました

mysql> `user2` から * を選択します。
空のセット

切り捨てによる削除

構文の形式は次のとおりです。

t_nameを切り捨てます。
mysql> `user2` から * を選択します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 12 | ブランド | 21 | 福州 | 1 |
| 13 | ヘレン | 20 | 泉州 | 0 |
| 14 | ソル | 21 | 厦門 | 0 |
+----+-------+-----+----------+-----+
3行セット

mysql> `user2` を切り捨てます。
クエリは正常です。影響を受けた行は 0 行です

mysql> `user2` から * を選択します。
空のセット

これは delete と非常によく似ていますが、データを再挿入すると、自動増分主キーが再び 1 から開始されますが、delete では元の自動増分値が直接追加されます。下の id フィールドを参照してください。

mysql> `user2` (名前、年齢、住所、性別) に値を挿入します ('brand'、21、'fuzhou'、1)、('helen'、20、'quanzhou'、0)、('sol'、21、'xiamen'、0);
クエリは正常、3 行が影響を受けました
記録: 3 重複: 0 警告: 0

mysql> `user2` から * を選択します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
+----+-------+-----+----------+-----+
3行セット

では、切り捨てと削除の違いは何でしょうか?整理してみましょう。

切り捨てと削除の比較

1. 切り捨てとは、テーブル内のデータをクリアしてテーブル内のスペースを解放することを意味しますが、テーブルのスキーマ定義 (テーブル構造) は削除されません。 Where 条件がないため、特定の行を削除するのではなく、テーブル全体がクリアされます。

2. 削除ステートメントは、テーブル内のデータ行を削除するために使用されます。削除のディメンションと範囲を制御する条件を続けることができます。テーブルから行が削除されるたびに、行の削除操作は、ロールバック操作の可能性のあるトランザクションとしてログに保存されます。

3. 切り捨てと削除の類似点は、データのみが削除され、関連するテーブル構造とその列、制約、インデックスなどは変更されないことです。

4. 外部キーによって制約されている場合、切り捨ては使用できません。where 句のない削除ステートメントのみ使用できます。

5. 切り捨て操作はログに記録され、削除操作はロールバック セグメントに配置されます。実行された場合、トランザクションがコミットされた後にのみ有効になります。したがって、削除は削除トリガー (存在する場合) をトリガーしますが、切り捨てはトリガーしません。

6. 上記のテストのように自動インクリメント フィールドが含まれている場合、切り捨てメソッドがクリアされた後、自動インクリメント列の値は 1 に初期化されます。

削除方法は、さまざまな状況に応じて判断する必要があります (すべてのデータが削除され、データベースが再起動されていない場合は、以前の max+1 が使用されます。データベースが再起動されると、自動インクリメント列の初期値が再計算されます)。

7. drop もあります。drop ステートメントは、テーブルの構造、データ、テーブルに依存する制約、トリガー、インデックスなどを含むテーブルを削除します。

上記はMySQLデータ操作-DMLステートメントの詳細な内容です。MySQL dmlステートメントの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

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

<<:  React のクラスからフックへの移行

>>:  Docker 自動ビルド 自動ビルド実装プロセス図

推薦する

DockerにElasticsearch7.6クラスタをインストールしてパスワードを設定する方法

目次基本的な設定バージョンとDockerイメージについて始めるelasticsearch.ymlにつ...

mysql8.0 でユーザーを作成して権限を付与する際のエラーの解決方法の詳細な説明

質問1:エラーを報告する書き込み方法: GRANT OPTION を使用して、'123123...

react+reduxを使用してカウンター機能を実装すると発生する問題

Redux はシンプルな状態マネージャーです。その歴史をたどることはしません。使用法の観点から見ると...

Windows システムに MySQL を素早くインストールして展開する方法 (グリーンの無料インストール バージョン)

まずは緑色の無料インストール版のMySQLをダウンロードします。任意のフォルダに入れて構いません。今...

Ubuntu でディスク容量不足により MySQL が起動しない場合の解決策

序文最近、データベースのテーブルに 2 つのフィールドを追加しました。その後、ディスク容量不足のよう...

MySQLデータベースのパスワードを忘れた場合の解決策

先ほど MySQL パスワードを設定したのに、外食したり荷物を受け取ったりするときにパスワードを忘れ...

js オプション連鎖演算子の使用

序文オプションの連鎖演算子 (?.) を使用すると、チェーン内の各参照が有効であることを明示的に検証...

Docker での Redis 接続の急増をトラブルシューティングした実践的な記録

土曜日、本番サーバー上の Redis サーバーが利用できなくなり、エラー メッセージは次のようになり...

WeChatアプレットコンポーネント開発:視覚的な映画座席選択機能

目次1. はじめに1. コンポーネントデータ2. コンポーネントページのレイアウト1. ロゴエリアの...

JS の効率的なマジック演算子の概要

JavaScript は現在、毎年新しいバージョンがリリースされており、より便利で効率的な新しい演算...

CSS グリッドレイアウトで列にアイテムを埋め込む方法

n 個のアイテムがあり、これらのアイテムをグリッド レイアウトの列に並べ替える必要があるとします。列...

Linux ifconfig コマンドの使用

1. コマンドの紹介ifconfig (ネットワーク インターフェイスを構成する) コマンドは、ネッ...

ドキュメントの場所の比較

<br />2 年前に PPK が投稿した素晴らしいブログ記事では、contains()...

CSS3 アニメーション ボールローリング JS コントロールアニメーション一時停止

CSS3 はアニメーションを作成でき、多くの Web ページのアニメーション画像、Flash アニメ...

スクロールバーがスペースを占有することで発生するバグを修正しました

背景このバグは滾動條占據空間ことで発生していました。いくつかの情報を確認して、ようやく解決しました。...