mysql insert into table insert statement syntax examples
このチュートリアルでは、MYSQL INSERTINTOテーブルステートメントとクエリの構文および例について説明します。また、MYSQL挿入コマンドのさまざまなバリエーションを学びます。
MySQLでは、INSERTコマンドを使用してテーブルにデータを追加します。このコマンドを使用すると、1つのトランザクションで1つまたは複数の行にデータを挿入できます。また、1回のトランザクションで1つまたは複数のテーブルにデータを追加できます。
これらすべてについては、次のセクションで説明します。先に進む前に、MySQLバージョン8.0を使用していることに注意してください。あなたはそれをからダウンロードすることができます ここに 。
学習内容:
MySQLINSERTコマンドの構文
INSERT (LOW_PRIORITY|DELAYED|HIGH_PRIORITY)(IGNORE) INTO tablename (column1, column2, column3...) VALUES (value1, value2, value3, ....);
構文の説明:
- 構文はキーワード「INSERTINTO」で始まり、それによって実行されるアクティビティのタイプについてMySQLサーバーに通知します。これは必須のキーワードであり、省略できません。
- 次に、挿入アクションを実行する必要のあるテーブルの名前を示します。これは必須であり、省略することもできません。
- 次に、挿入される列名とそれに対応する値が表示されます。繰り返しますが、これも必須であり、省略できません。
- 次に、values句になります。この句では、テーブルに挿入するすべての列の値を指定する必要があります。値のシーケンスと列名のシーケンスは同期している必要があります。
- 列の数とデータ型は、値と同じである必要があります。
INSERTステートメントの修飾子
- LOW_PRIORITY: この修飾子は、INSERTしようとしているテーブルからの読み取りとの接続がなくなるまで、INSERTステートメントの実行を遅らせるようにMySQLエンジンに通知します。これは、そのテーブルで実行される他のすべての操作全体で一貫性を実現するのに役立ちます。
- HIGH_PRIORITY: この修飾子は、他のステートメントよりもINSERTステートメントを優先するようにMySQLエンジンに通知します/ トランザクション それはテーブルで実行されています。
- 無視: この修飾子は、INSERTステートメントの実行が原因で発生する可能性のあるエラーを無視するようにMySQLEngineに通知します。発生したエラーは単なる警告として扱われ、テーブルへのレコードの挿入は妨げられることなく続行されます。
- 遅延: これは、標準SQLに対するMySQLの拡張機能です。ユーザーがINSERTDELAYEDを発行すると、サーバーはすべての行をキューに入れ、テーブルが他のトランザクションで使用されていないときに、後でデータがテーブルに挿入されます。
MySQLINSERTの例
以下は、MySQLで作成されたサンプルテーブルです。
スキーマ名: パシフィック
テーブル名: 従業員
列名:
- empNum –従業員番号の整数値を保持します。
- lastName –従業員の姓のvarchar値を保持します。
- firstName –従業員の名のvarchar値を保持します。
- email –従業員の電子メールIDのvarchar値を保持します。
- deptNum –従業員が属する部門IDのvarcharを保持します。
- salary –各従業員の給与の10進値を保持します。
- start_date –従業員の参加日の日付値を保持します。
スキーマ名: パシフィック
テーブル名: employee_history
列名:
- empNum –従業員番号の整数値を保持します。
- lastName –従業員の姓のvarchar値を保持します。
- firstName –従業員の名のvarchar値を保持します。
- email –従業員の電子メールIDのvarchar値を保持します。
- deptNum –従業員が属する部門IDのvarcharを保持します。
- salary –各従業員の給与の10進値を保持します。
- start_date –従業員の参加日の日付値を保持します。
MySQLINSERTステートメントのバリエーション
#1)MySQLは単一行を挿入します
最初に、INSERTINTOキーワードを使用して列名と挿入する値の両方を指定したシナリオを見ていきます。
例えば、 ここでは、新しい従業員を挿入しようとします。従業員番号、姓名を追加するとともに、新しい従業員が属する必要のある電子メールID、給与、部門IDも更新します。
クエリと対応する結果は次のとおりです。
上の図に示されているように、INSERTステートメントは正常に実行され、従業員のテーブルに1行挿入されました。
以下の出力ステートメントは、ステートメントが実行された時刻、実行されたMySQLステートメント、および影響を受けた行の数を示しています。
ここに注意してください、 各列の値は、列名の値と同じ順序で記述されていること。また、整数/ 10進のデータ型の列は逆コンマで囲まれていませんが、varchar / charデータ型の列タイプは逆コンマで囲まれていることに注意してください。
このINSERTステートメントの出力を確認するために、empNumを1012としてこのテーブルでSELECTステートメントを実行してみましょう。
クエリ:
INSERT INTO employees ( empNum, lastName, firstName, email, deptNum, salary ) VALUES ( 1012, 'Luther', 'Martin', 'ml@gmail.com', 3, 13000 ) ;
後のテーブルスナップショット:
empNum | 苗字 | ファーストネーム | Eメール | deptNum | 給料 | |
---|---|---|---|---|---|---|
1007 | シュミット | ジェームズ | js@gmail.com | 4 | 21780 | 0001-01-01 |
1012 | ルター | マーティン | ml@gmail.com | 3 | 13000 |
#2)指定された列にのみデータを挿入するMySQL
次に、データをテーブルに挿入する別の方法ですが、すべての列ではなく、必要な列にのみレコードを挿入します。ただし、このシナリオではキー列を省略できないことに注意してください。従業員のテーブルの場合、キー列はempNum列です。これを試してみましょう。
例えば、 empNum、lastName、firstNameのみのデータを含む新しいレコードをemployeeテーブルに挿入します。この従業員に電子メールID、部門、または給与を割り当てることはありません。
クエリとその結果は次のとおりです。
上の図に示されているように、insertステートメントは正常に実行され、従業員のテーブルに1行挿入されました。
javaで汎用配列を作成する方法
ご注意ください、 選択した列のみを挿入するには、スキップした列をNULLと宣言するか、列がスキップされた場合に入力されるデフォルト値を設定する必要があります。この条件が満たされない場合、挿入ステートメントは失敗します。
empNum = 1013に対してSELECTステートメントを実行して、上記のINSERTステートメントの実行を確認しましょう。
クエリ:
INSERT INTO employees ( empNum, lastName, firstName ) VALUES ( 1013, 'Nolan', 'Chris' ) ;
後のテーブルスナップショット:
empNum | 苗字 | ファーストネーム | Eメール | deptNum | 給料 |
---|---|---|---|---|---|
1013 | ノーラン | クリス | ヌル | ヌル | ヌル |
#3)MySQLは複数の行を挿入します
次に、同じINSERTステートメントを使用してテーブルに複数の行を挿入する必要があるシナリオについて説明します。
例えば、 この場合、列名を1回だけ言及する必要がありますが、それらの列の値を必要な回数繰り返し続けることができます。
以下は、クエリとそれに関連する結果です。
上の図に示されているように、ステートメントの実行は成功しました。
3行が影響を受けたことを示すメッセージ部分に注意してください。これは、この単一のINSERTステートメントがこのINSERTステートメントの実行時に3つのレコードを挿入したことを意味します。
さらに読む= >> MySQLIfステートメントチュートリアル
新しい従業員ID1014、1015、および1016に対してSELECTステートメントを実行して、INSERTステートメントの出力を確認しましょう。
詳細は以下のとおりです。
クエリ:
INSERT INTO employees ( empNum, lastName, firstName, email, deptNum, salary ) VALUES (1014, 'Murray', 'Keith', 'km@gmail.com', 1, 25000), (1015, 'Branson', 'John', 'jb@gmail.com', 2, 15000), (1016, 'Martin', 'Richard', 'rm@gmail.com', 4, 5000) ;
後のテーブルスナップショット:
empNum | 苗字 | ファーストネーム | Eメール | deptNum | 給料 |
---|---|---|---|---|---|
1014 | マレー | キース | km@gmail.com | 1 | 25000 |
1015 | ブランソン | ジョン | jb@gmail.com | 二 | 15000 |
1016 | マーティン | リチャード | rm@gmail.com | 4 | 5000 |
#4)MySQL挿入日
次に、日付列に値を挿入する必要があるシナリオについて説明します。
例えば、 日付列に値を挿入するのは難しい場合があります。 MySQLの日付は、「YYYY-MM-DD」形式に追加できます。これを実現するために、デフォルト値が「0001-01-01」の列start_dateを追加しましょう。
これは、start_dateを持つ従業員のテーブル内のすべての既存のレコードが「0001-01-01」として更新されることを意味します。 alterステートメントは次のようになります。
クエリ:
ALTER TABLE employees ADD start_date DATE default '0001-01-01' ;
テーブルで簡単なSELECTステートメントを実行して、上記のクエリの出力を確認しましょう。
そのため、データ型が「DATE」で、デフォルト値が「0001-01-01」の新しい日付列を追加しました。次に、2つの新しい従業員レコードを挿入しましょう。1つは現在の日付で、もう1つは特定の日付です。
データベース開発者インタビューの質問と回答pdf
以下は、詳細とともにクエリです。
上の図に示すように、前のセクションで説明したように、テーブルに複数の行を挿入する機能を使用しました。
最初のレコードは、CURRENT_DATE()関数で挿入されました。この関数は、現在のシステム日付を返します。 2番目のレコードは、特定の日付で「YYYY-MM-DD」形式で挿入されました。
次に、empNum1017および1018のSELECTステートメントを使用してINSERTステートメントの出力を確認します。
empNum = 1017の最初のレコードのstart_dateは、現在の日付である25と同じです。th2019年11月(この場合はこのチュートリアルが作成された日付)の「YYYY-MM-DD」形式。
クエリ:
INSERT INTO employees ( empNum, lastName, firstName, email, deptNum, salary, start_date ) VALUES (1017, 'Johnson', 'Eve', 'ej@gmail.com', 3, 5500, CURRENT_DATE()), (1018, 'Bond', 'Nolan', 'nb@gmail.com', 2, 15000, '2019-09-13') ;
後のテーブルスナップショット:
empNum | 苗字 | ファーストネーム | Eメール | deptNum | 給料 | 開始日 |
---|---|---|---|---|---|---|
1017 | ジョンソン | イブ | ej@gmail.com | 3 | 5500 | 2019-11-25 00:00:00 |
1018 | つなぐ | ノーラン | nb@gmail.com | 二 | 15000 | 2019-09-13 00:00:00 |
#5)MySQLを別のテーブルからテーブルに挿入
次に、既存のテーブルから新しいテーブルにデータを挿入する必要があるシナリオについて説明します。
例えば、 既存のテーブルから履歴テーブルまたはアーカイブテーブルにデータを定期的に移動する必要があるシナリオを考えてみます。これを実現するために、新しいテーブルemployee_historyを作成しましょう。
私たちのタスクは、employeeテーブルからemployee_historyテーブルにデータを移動することです。
CREATEステートメントは次のとおりです。
クエリ:
CREATE TABLE employees_history LIKE employees ;
新しいテーブルで簡単なDESCステートメントを実行して、上記のクエリの出力を確認しましょう。これにより、新しいテーブルのテーブル構造がわかります。
そこで、新しいテーブルを作成しました。次に、従業員のテーブルからこの新しいテーブルにデータをロードしましょう。
=> MySQLの詳細 CREATE TABLE COMMAND 。
クエリとその詳細は次のとおりです。
ビデオゲームのレビュー担当者になる方法
上の図に示すように、既存のテーブルから新しいテーブルへのデータの挿入は成功しました。
出力タブのメッセージ列に注意してください。 18行が影響を受けたと表示されます。これは、既存のテーブルの18行すべてが新しく作成されたemployees_historyテーブルにコピーされたことを意味します。
次に、employees_historyテーブルのSELECTステートメントを使用してINSERTステートメントの出力を確認します。
上の図は、employees_historyテーブルのemployee’sテーブルからコピーされたすべての行を示しています。
上の図は、employees_historyテーブルのemployeesテーブルからコピーされたすべての行を示しています。
クエリ:
INSERT INTO employees_history ( empNum, lastName, firstName, email, deptNum, salary, start_date ) SELECT empNum, lastName, firstName, email, deptNum, salary, start_date FROM employees ;
後のテーブルスナップショット:
empNum | 苗字 | ファーストネーム | Eメール | deptNum | 給料 | 開始日 |
---|---|---|---|---|---|---|
1001 | アンドリュース | ジャック | ja@gmail.com | 1 | 3182.7 | 0001-01-01 |
1002 | シュワッツ | マイク | ms@gmail.com | 1 | 5304.5 | 0001-01-01 |
1003 | ラングレー | マーガレット | margaret.langley@gmail.com | 二 | 8820 | 0001-01-01 |
1004 | ハレラ | サンドラ | sh@gmail.com | 1 | 10609 | 0001-01-01 |
1005 | 読んだ | ピーター | pl@gmail.com | 二 | 14333 | 0001-01-01 |
1006 | キース | ジェニー | jk@gmail.com | 二 | 16538 | 0001-01-01 |
1008 | ベイリー | オリバー | Oliver.bailey@gmail.com | 3 | 24494 | 0001-01-01 |
1009 | カップ | ハリー | hb@gmail.com | 5 | 30646 | 0001-01-01 |
1010 | アームストロング | ヤコブ | jacob.armstrong@gmail.com | 4 | 32670 | 0001-01-01 |
1011 | ハンクス | トム | th@gmail.com | ヌル | 10100 | 0001-01-01 |
1012 | ルター | マーティン | ml@gmail.com | 3 | 13000 | 0001-01-01 |
1013 | ノーラン | クリス | ヌル | ヌル | ヌル | 0001-01-01 |
1014 | マレー | キース | km@gmail.com | 1 | 25000 | 0001-01-01 |
1015 | ブランソン | ジョン | jb@gmail.com | 二 | 15000 | 0001-01-01 |
1016 | マーティン | リチャード | rm@gmail.com | 4 | 5000 | 0001-01-01 |
1017 | ジョンソン | イブ | ej@gmail.com | 3 | 5500 | 2019-11-25 00:00:00 |
1018 | つなぐ | ノーラン | nb@gmail.com | 二 | 15000 | 2019-09-13 00:00:00 |
よくある質問と回答
Q#1)MySQLのテーブルにデータをどのように挿入しますか?
回答: MySQLテーブルにデータを挿入するために、MySQLは「INSERTINTO」という重要なキーワードを提供します。この後に、テーブル名、列のリスト、および挿入する必要のある対応する値のリストが続きます。このキーワードを使用して、同じトランザクションに1つ以上の列を挿入できます。
Q#2)「INSERTIGNOREINTO」という条項について説明してください。
回答: 1つのINSERTステートメントに複数の行を挿入しようとすると、特定の行のデータが不良であるために実行が失敗する可能性があります。これにより、トランザクションが停止し、前のコミットにロールバックされます。
このようなシナリオを回避するために、 「INSERTIGNOREINTO」 使用されている。この句は、無効なレコードの原因となるエラーを無視し、トランザクションが停止しないように有効なレコードのみを挿入します。これは、一括挿入を行う必要があり、行の不良データに対して再挿入する余裕がない場合に役立ちます。
Q#3)MySQLで属性を更新するにはどうすればよいですか?
回答: MySQL Updateステートメントを使用して属性を更新できます。ステートメントは、UPDATEキーワードで始まり、その後にテーブル名が続きます。次はSET句で、その後に列名とWHERE句が続きます。
Q#4)1つのMySQL Insertトランザクションに複数のレコードを挿入できますか?
回答: 上に描かれているように、 「複数行にデータを挿入する」 セクションでは、1回の挿入トランザクションで複数の行を挿入できます。 INSERT INTO句の後にテーブル名と列のリストを使用できますが、1つの値のリストの代わりに、各列の値の複数のリストに言及する必要があります。
Q#5)MySQLはどこからダウンロードしますか?
回答: MySQLバージョン8.0はここからダウンロードできます。 MySQL 。
また読む=> MySQLをダウンロードする方法
Q#6)SELECT句をMySQL INSERTステートメントで使用できますか?
回答: はい、SELECTはMySQLINSERTステートメントと一緒に使用できます。これは、「MySQL別のテーブルからのテーブルの挿入」のセクションで説明されています。これは、他のテーブルにすでに存在するデータを使用して、1つのテーブルに行を挿入する必要がある場合に使用されます。
例えば、 現在のテーブルからデータウェアハウスの履歴テーブルにデータを移動します。
Q#7)MySQLはどのように日付をテーブルに保存しますか?
回答: MySQLは、テーブルに日付を格納するために「YYYY-MM-DD」形式を使用します。ここでのデータ型はDATEです。 MySQLでサポートされている日付の範囲は、「1000-01-01」から「9999-12-31」です。
MySQLには、日付と時刻の両方を格納するDATETIMEデータ型もあります。形式は「YYYY-MM-DDhh:mm:ss」です。許容範囲は「1000-01-0100:00:00」から「9999-12-3123:59:59」です。
推奨読書= >> MySQLデータ型チュートリアル
結論
したがって、このチュートリアルでは、MySQLでINSERTステートメントを実行する5つの異なる方法について学習しました。
- MySQLが単一行を挿入
- MySQLは指定された列にのみデータを挿入します
- MySQLが複数の行にデータを挿入する
- MySQL挿入日
- MySQL別のテーブルからテーブルを挿入する
プロジェクトの要件に基づいて、これらのいずれかを使用できます。
幸せな読書!!