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 自動ビルド 自動ビルド実装プロセス図

推薦する

Linuxでユーザーが所属するグループを変更する方法

Linuxでユーザーが所属するグループを変更する1. ユーザーのグループを設定する usermod ...

フロントエンドの状態管理(パート2)

目次1. 再出発1.1. ストア(司書) 1.2. 状態(書籍) 1.3. アクション(図書貸出リス...

フロントエンド制作に関する簡単な議論: 互換性のために IE6 はまだ必要ですか?

国内市場ではIE6~7のサポートに対する一定の需要がまだありますが、フロントエンド開発者として、私た...

Linux システムで時間を取得して使用する方法

Linux システム時間には 2 種類あります。 (1)暦上の時刻。値は、指定された時刻、1970 ...

win10 64 ビット システムに複数の JDK バージョンをインストールする際の切り替え問題と解決策の概要

コンピューターにmyeclipse2017とidea2017がインストールされているため、ideaが...

sqlite を mysql スクリプトに移行する方法

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 パーレル # # https:/...

elementui での el-cascader カスケードセレクタの実践

目次1. 効果2. メインコード1. 効果機能: インターフェイスから取得したデータを使用してオプシ...

Eclipse は Tomcat を構成しますが、Tomcat には無効なポート解決策があります

目次1. EclipseがTomcatを構成する2. Tomcat の無効なポートの解決方法方法1:...

divは、自動入力スタイルをブロックする入力ボックスとして入力を使用せずにコンテンツを入力できます。

今日、私は公開用の動的なウィンドウ スタイルを設計しましたが、マウスで入力をクリックしたときにブラウ...

ReactのEffectListの簡単な分析

目次EffectList コレクション最初のレンダリング時のEffectList EffectLis...

mysql 結合クエリ (左結合、右結合、内部結合)

1. MySQLの一般的な接続INNER JOIN (内部結合、または等価結合): 2 つのテーブ...

HTML テーブル マークアップ チュートリアル (4): 境界線の色属性 BORDERCOLOR

テーブルを美しくするために、テーブルにさまざまな境界線の色を設定できます。基本的な構文<テーブ...

Linux ドライバ開発でよく使われる関数 copy_from_user open read write の詳細な説明

目次Linux ドライバーの共通機能 (copy_from_user open read write...

MySQL の JSON 挿入の問題

MySQL 5.7.8 以降では、JSON テキストでデータを効率的に取得できるネイティブ JSON...