未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【DB入門】データベースの作成 Part2

title


データの挿入

テーブルにデータを挿入するには、「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コマンドです。

MySQLコマンド



次の例は、show tables コマンドを使って、現在のデータベースに登録されているテーブルを一覧表示しています。

show tables



clearコマンドの使用例

コマンド入力の途中で「¥c」を入力しEnterキーを押すと、実行をせずに取りやめることができます。

下の例は、最後のセミコロンを入力する前に「¥c」を入力してEnterキーを押すことで、コマンドそのものの実行を取りやめています。

コマンドは実行されず、MySQLプロンプト(mysql>)が表示されています。

clearコマンド



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コマンドで実行] sourceコマンドで実行


[SELECTコマンドで確認] SELECTコマンドで確認



テーブルやレコードのコピー、削除

一度作成したテーブルを再利用できるように、テーブルのコピー方法を3つご紹介します。

  1. テーブルの列構造とデータをコピーする
  2. テーブルの列構造だけコピーする
  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公式アカウント

仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】


LineOfficial

友だち追加