データの挿入
テーブルにデータを挿入するには、「INSERT INTO」コマンドを使います。
【書式】データの挿入
INSERT INTO テーブル名 VALUES(データ1, データ2 ・・・);
VALUESの後ろの()内に、設定した列名の順にデータをカンマで区切って記述をします。
[syohin_master]のデータの一部
[syohin_master]のテーブル構成
例えば、[syohin_master]テーブルにデータを挿入するとします。
1行が1件のレコードにあたります。
syohin_no列はCHAR(5)なので5文字を超えて入力することはできません。
ただしMySQLの場合、指定の文字数を超えてもエラーにはならず、入りきれない文字が切り捨てられますので注意が必要です。
数値データはそのまま記述します。
単価のデータに3桁区切りカンマが付いていますが、データベースに入力する際には、カンマは入力せず、数値のみ入力します。
3桁カンマのような書式は別途指定をします。
もし、ここでカンマを入力してしまうと、数値ではなく文字列としてみなしてしまいます。
文字列データや日付データはダブルクォーテーションまたはシングルクォーテーションで文字列を囲んで記述をします。
文字列データとして感じやひらがななどの全角文字を入力する場合は、半角と全角を切り替えて入力をします。
日本語以外の部分はすべて半角です。
コマンドとコマンドの間のスペースも半角です。
全角で入力をするとエラーになるので注意しましょう。
下の例は1件目のデータを挿入するコマンドを実行したところです。
INSERT INTO shohin_master VALUES("JM001", "ジャケット", 29800);
と入力します。
mysql> INSERT INTO shohin_master VALUES("JM001", "ジャケット", 29800); Query OK, 1 row affected(0.02 sec)
データが正しく挿入されると Query OK
と表示されます。
You have an error
と表示された場合は、スペルが正しいかどうかを確認しましょう。
2件目以降のデータを入力する時は、同じように入力をしても良いのですが、キーボードの「↑」や「↓」キーを押すと、今までの行った操作の履歴が表示されるので、直前の INSERT INTO コマンドの記述を表示して、データ部分の修正を行うと効率的です。
なお、コマンドプロンプト上ではマウス操作はできませんので、変更したい箇所への移動は「→」や「←」キーを利用します。
「F7」キーを押すと履歴の一覧が表示されますので、「↑」「↓」キーで該当コマンドに移動をし、Enterキーを押すことで、実行をすることができます。
履歴の表示を消したい場合は、Escキーを押します。
これまでのデータ挿入方法は、列名の順番にデータを挿入するので、すべてのデータを入力する必要があります。
例えば、「unit_price」列の値が不明である場合は、次のように「値がない」という意味で Null 値を指定しなければなりません。
INSERT INTO syohin_master VALUES("JM001", "ジャケット", Null);
特定の列だけ値を挿入したい場合でも、すべての列の値を入力しなければならないので、効率が良いとは言えません。
次の書式を使うと、列名を指定してデータを挿入することができます。
【書式】列名を指定してデータを挿入する
INSERT INTO テーブル名(列名1, 列名2 ・・・) VALUES (データ1, データ2 ・・・);
syohin_noとsyohin_nameのみデータを挿入し、それ以外の列はNull値を挿入したい場合、次のように入力をします。
INSERT INTO syohin_master(syohin_no, syohin_name) VALUES ("JM001", "ジャケット");
mysql> INSERT INTO syohin_master(syohin_no, syohin_name) VALUES ("JM001", "ジャケット"); Query OK, 1 row affected(0.00 sec)
ヒント「空文字」と「値がない」
「""」や「''」は空文字という意味で「値がない」という意味とは異なります。
「値がない」場合は、必ずNull値を設定しましょう。
【書式】一度にデータを挿入する
INSERT INTO テーブル名(列名1, 列名2 ・・・) VALUES (データ1, データ2 ・・・), (データ1, データ2 ・・・), (データ1, データ2 ・・・), ・・・;
レコードを1行1行入力するのではなく、複数のレコードを一度に入力するには、VALUESの後ろに値を指定する際に、1行分を()のひとかたまりで入力をします。
ひとかたまりごとにカンマで区切ります。
例えば、次の2レコード分を一度に挿入したい場合は、次のように記述します。
mysql> INSERT INTO syohin_master VALUES ("JM001", "ジャケット", 29800), ("TM005", "Tシャツ", 1980); Query OK, 2 rows affected (0.12 sec)
ヒント 複数行にまたがって入力し、見やすくする
SQL分は長くなると読みづらくなりますし、1行でおさまらないことが多々あります。
初期設定では最後のセミコロンまでが1つの命令とみなされますので、途中Tabや半角スペースを入れたり、字下げインデントを入れたりしても構いません。
ただし、キーワードやデータの途中で改行をするとエラーになるので気をつけましょう。
(次の行に改行したい時、Enterキーを押すとコマンドが実行されてしまいます。半角スペースやTabキーを使います。)下の例は、前の2レコード分のデータを挿入するコマンドを、改行をして見やすくしたものです。
myql> INSERT INTO syohin_master VALUES -> ("JM001", "ジャケット", 29800), -> ("TM005", "Tシャツ", 1980); Query OK, 2 rows affected (0.00 sec)
データを表示する
データを入力することができたら、入力したデータがきちんと挿入されているかを確認します。
【書式】指定した列のデータの表示
SELECT 列名1, 列名2, ・・・ FROM テーブル名;
(syohin_noとsyohin_nameのみを指定して表示した例)
【書式】すべての列のデータの表示
SELECT * FROM テーブル名;
(すべての列を表示した例)
SQL文とMySQLコマンド
データベースに対する命令はこれまで見てきたようにMySQLプロンプト(mysql>)で行います。
MySQLプロンプト(mysql>)上で入力できるのはSQL文のコマンドだけではなく、MySQLコマンドと呼ばれるデータベース管理用のコマンドがあります。
SQL文 : リレーショナルデータベースの共通言語
MySQLコマンド : MySQL独自のコマンド
下の表は主なMySQLコマンドです。
次の例は、show tables
コマンドを使って、現在のデータベースに登録されているテーブルを一覧表示しています。
clearコマンドの使用例
コマンド入力の途中で「¥c」を入力しEnterキーを押すと、実行をせずに取りやめることができます。
下の例は、最後のセミコロンを入力する前に「¥c」を入力してEnterキーを押すことで、コマンドそのものの実行を取りやめています。
コマンドは実行されず、MySQLプロンプト(mysql>)が表示されています。
sourceコマンドの使用例
sourceコマンドを使うと、テキストファイルなどに記述されたSQL文を読み込んで実行することができます。
例えば、データを挿入するINSERTコマンドを実行する時などは、とても長いSQL文を入力しなければなりません。
MySQLプロンプト上ではマウス操作ができないため、効率よく入力するのは至難の業です。
そこで、テキストファイルに実行したいSQL文を入力しておき、sourceコマンドで実行をします。
テキストファイルでの入力は、マウス操作やコピー、ペーストなどのショートカットキーなどが使えるので、長いSQL文を効率よく入力することができます。
次の例は、データを挿入するSQL文をテキストファイル「syohin_master_data.txt」に入力し、「C:¥db_primary」に保存して、sourceコマンドを使用して実行しています。
[C:¥db_primary¥syohin_master_data.txt]
[sourceコマンドで実行]
[SELECTコマンドで確認]
テーブルやレコードのコピー、削除
一度作成したテーブルを再利用できるように、テーブルのコピー方法を3つご紹介します。
- テーブルの列構造とデータをコピーする
- テーブルの列構造だけコピーする
- データのみコピーする
【書式】テーブルの列構造とデータのコピー
CREATE TABLE 新規テーブル名 SELECT * FROM 元になるテーブル名;
この方法でテーブルをコピーしておくと、テーブルとデータをバックアップすることになるので、不足の事態が起きてテーブルが壊れても、復元することができます。
コピー元になるテーブルから SELECT * FROM
で全選択されたデータを、新規に CREATE TABLE
するという意味です。
次の例は、「syain_master」テーブルを「syain_master_bk」という名前でコピーしています。
[hanbaikanri_db]データベース内に、「syain_master_bk」テーブルができていることが分かります。
[syain_master]テーブルからコピーされた[syain_master_bk]テーブルの構造をDESCコマンドで確認してみると、[syain_master]テーブルと同じであることがわかります。
データも、[syain_master]テーブルと同じであることがわかります。
【書式】テーブルの列構造のみコピー
CREATE TABLE 新規テーブル名 LIKE 元になるテーブル名;
この方法でテーブルをコピーすると、テーブルの列構造のみコピーし、データはコピーされません。
販売リストのような日々入力されるテーブルのテンプレートとしてとっておくと便利です。
次の例は「hanbai_list」テーブルを「habai_list_template」という名前で、テンプレートとして作成をしています。
mysql> CREATE TABLE hanbai_list_template LIKE hanbai_list; Query OK, 0 rows affected (0.01 sec)
[hanbaikanri_db]データベース内に、「hanbai_list_template」テーブルができていることがわかります。
DESCコマンドでテーブルの構造を確認すると、[hanbai_list]テーブルと同じであることがわかります。
テーブル構造だけがコピーされるので、データは空であることがわかります。
mysql> SELECT * FROM hanbai_list_template; Empty set (0.00 sec)
【書式】同じ列構造の他のテーブルからデータをコピーする
INSERT INTO コピー先テーブル名 SELECT * FROM 元になるテーブル名;
すでに出来上がっているテーブルから同じ列構造の別のテーブルに、データのみコピーします。
「SELECT * FROM」で全選択されたデータを、テーブル挿入「INSERT INTO」する、という意味です。
次の例は、データの入っていない[hanbai_list_template]テーブルに、[hanbai_list]からデータをコピーしています。
mysql> INSERT INTO hanbai_list_template SELECT * FROM hanbai_list; Query OK, 9 rows affected (0.01 sec) Records: 9 Duplicates: 0 Warnings: 0
SELECTコマンドを実行して、データの内容を確認すると、[hanbai_list_template]テーブルにデータがコピーされているのがわかります。
【書式】特定の列のデータをコピーする
INSERT INTO コピー先テーブル名 (列名) SELECT 列名 FROM 元になるテーブル名;
特定の列を指定して、別のテーブルのある列にコピーできます。
両方の列構造が同じである必要があります。
それ以外の列にはNULL値が入ります。
次の例は、[kokyaku_master]テーブルの「kokyaku_no」列のデータを、[hanbai_list_template]テーブルの「kokyaku_no」列にコピーします。
まず2つのテーブルの列構造をDESCコマンドで確認しておきましょう。
[kokyaku_master]テーブルのkokyaku_no列のデータを、[hanbai_list_template]テーブルのkokyaku_no列に挿入します。
mysql> INSERT INTO hanbai_list_template (kokyaku_no) -> SELECT kokyaku_no FROM kokyaku_master; Query OK, 9 rows affected (0.03 sec)
コピー先の[hanbai_list_template]テーブルに、[kokyaku_master]テーブルの「kokyaku_no」列のデータがコピーされ、それ以外の列にはNULL値が挿入されているのがわかります。
このように、テーブル構造の異なるテーブル同士でも、コピーしたい列構造が同じであれば問題ありません。
【書式】テーブルの削除
DROP TABLE テーブル名;
作成に失敗したり、不要になったテーブルを削除します。
いったん削除すると元に戻せませんので、慎重に行いましょう。
次の例は、[hanbai_list_template]テーブルを削除しています。
mysql> DROP TABLE hanbai_list_template; Query OK, 0 rows affected (0.06 sec)
[hanbaikanri_db]データベースの存在するテーブルのリストから[hanbai_list_template]が削除されていることがわかります。
【書式】データベースの削除
DROP DATABASE データベース名;
データベースを削除すると元に戻せませんので、十分に注意しましょう。
すでに作成してあるデータベースをコピーするには、特殊な操作が必要になり、管理者権限を持つユーザにのみ限られています。
【書式】テーブルに登録されているレコード全体の削除
DELETE FROM テーブル名;
テーブル自体は削除せず、テーブルに登録されているデータのみをすべて削除します。
テーブル全体ではなく、一部のレコードを削除する場合には「WHERE」というキーワードを使用します。
次の例は、[syain_master]テーブルに登録されているレコードをすべて削除しています。
mysql> DELETE FROM syain_master_bk; Query OK, 7 rows affected (0.35 sec)
mysql> SELECT * FROM syain_master_bk; Empty set (0.00 sec)
[syain_master]テーブルのレコードが削除されたことがわかります。
参考図書
LINE公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】