テーブルの生成と削除

 MySQLにおけるテーブルの生成と削除について解説します。

また、つくったテーブルにデータを入力して、表示し確認するところまで解説します。

MySQLとMacのターミナルにおける文字コードの違いによる文字化けの対処法のMEMOもありますので、文字化けでお困りの方は参考にしてみてください。

MySQLへのログインとデータベースの選択

まずは、MySQLへログインしてください。

mysql -u root -proot

そして、データベースmy_dbを選択します。

USE my_db;

データベースがない人は

CREATE DATABASE my_db;

で作成しておきましょう。

テーブルの生成

ではmy_dbにテーブルを作っていきます。

テーブルとはエクセルでいう表のようなものです。

今回は

 id name age
taro 山田太郎 21
hana 佐藤花子 12
kondo 近藤武蔵 24

のようなデータをテーブルにいれることにします。

テーブルを作成する際に、データの型というものが重要になります。

今回の場合は、「id」「name」が文字型、「age」が数値なので

  1. id,name:VARCHAR(10)
  2. age:INT

と型を設定します。

 

そして、テーブルをつくるには

CREATE TABLE テーブル名(カラム名1 データ型1, カラム名2 データ型2…);

という命令を使います。今回の場合は

mysql> CREATE TABLE my_tb(id VARCHAR(10),name VARCHAR(10),age INT);

と入力します。すると

mysql> CREATE TABLE my_tb(id VARCHAR(10),name VARCHAR(10),age INT);
Query OK, 0 rows affected (0.03 sec)

と表示されます。

データ型は数値型、文字列型、日付・時刻型に大別できます。以下の表にこれらのデータ型についてのせておきます。

【数値型】

データ型 意味 範囲 バイト
 INT 整数  -2147483648〜2147483647
(0〜4294967295)
4
 FLOAT 実数 -3.402823466E+38 から -1.175494351E-38,
0,
1.175494351E-38 から 3.402823466E+38,
4
 DOUBLE 倍精度実数  -1.7976931348623157E+308 から -2.2250738585072014E-308
0
2.2250738585072014E-308 から 1.7976931348623157E+308
8
 DECIMAL  固定小数点数  DECIMAL(最大桁数,小数点以下桁数)で実数の範囲を決めます。最大桁数は65、小数点以下は30まで指定できます。 *
 TINYINT  とても狭い範囲の整数 -128〜127
(0〜255)
1
 SMALLINT  狭い範囲の整数  -32768〜32767
(0〜65535)
2
 MEDIUMINT  中くらいの範囲の整数 -8388608〜8388607
(0〜16777215)
3
 BIGINT  広い範囲の整数  -9223372036854775808〜9223372036854775807
(0〜18446744073709551615)
8

【文字列型】

 データ型 意味 範囲
 CHAR  固定長の文字列 255文字まで
 VARCHAR  可変長の文字列  1〜65532バイト
 TEXT  長い文字列  65535文字まで
 LONGTEXT とても長い文字列  4294967295文字まで

【日付・時刻型】

データ型 意味 範囲
DATETIME 日付と時刻 1000-01-01 00:00:00〜9999-12-31 23:59:59
DATE 日付 1000-01-01〜9999-12-31
YEAR 1901〜2155(4桁の場合) 1970〜2069(2桁のとき)
TIME 時刻 -838:59:59〜838:59:59

テーブルの確認

作成したテーブルを確認してみましょう。

テーブルを確認するには

SHOW TABLES;

という命令を使います。実際に

mysql> SHOW TABLES;

とすると

mysql> SHOW TABLES;
+-----------------+
| Tables_in_my_db |
+-----------------+
| my_tb           |
+-----------------+
1 row in set (0.00 sec)

となり確かにmy_tbがあることが確認できます。

カラム構造の確認

次にテーブルのカラム構造(id,name,age)を確認してみましょう。

DESC テーブル名;

を使い

mysql> DESC my_tb;

とすると

mysql> DESC my_tb;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | varchar(10) | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

となります。ここで

  1. 「Field」:id,name,ageといった項目の名前
  2. 「Type」:データの型
  3. 「Null」:何も入力していなくてもOKという意味です。
  4. 「Default」:値がない場合の値

という意味です。「Key」と「Extra」についてはまた適切なときに説明します。

テーブルの削除

テーブルの削除は

DROP TABLE テーブル名;

で行います。例えば

mysql> DROP TABLE my_tb;

とすれば

mysql> DROP TABLE my_tb;
Query OK, 0 rows affected (0.01 sec)

となり、テーブルmy_tbを削除できます。

データの入力

では作成したテーブルにデータを挿入していきます。

データの入力には以下の命令を使います。

INSERT INTO テーブル名(カラム名1,カラム名2…) VALUES(データ1,データ2…), (データ1,データ2…)…;

【データがひとつの場合】

INSERT INTO テーブル名(カラム名1,カラム名2…) VALUES(データ1,データ2…);

【上から順に入力する場合】

INSERT INTO テーブル名 VALUES(データ1,データ2…);

では、

 id name age
taro 山田太郎 21
hana 佐藤花子 12
kondo 近藤武蔵 24

を入力していきます。まずは、山田さんと佐藤さんのデータを入力してみます。

あえて、name,age,idという順で入力してみます。

コピペせずに、自分で以下のようにコマンドをうってください。

mysql> INSERT INTO my_tb(name,age,id) VALUES('山田太郎',21,'taro'),('佐藤花子',12,'hane');

すると

 mysql> INSERT INTO my_tb(name,age,id) VALUES(‘山田太郎’,21,’taro’),(‘佐藤花子’,12,’hane’);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

となります。

もしMacのターミナルを使用した場合は、warningが出るかと思います。

mysql> INSERT INTO my_tb(name,age,id) VALUES(‘山田太郎’,21,’taro’),(‘佐藤花子’,12,’hana’);
Query OK, 2 rows affected, 2 warnings (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 2

この場合は、これはターミナルの文字エンコーディングが問題です。Macのターミナルでは通常UTF-8が使われます。

「ターミナル->環境設定」で確認できます。

設定

一方、MySQLの設定ではUTF-8になっていない。これがWarningの原因です。

ですから、MySQLの文字エンコードを「UTF-8」へ変更します。

そのために、Finderで「/Applications/MAMP/Library/support-files/」へ移動して

「my-large.cnf」

をコピーします。そして、「/Applications/MAMP/conf/」へペーストしてください。この際名前を

「my.cnf」

へ変更します。そして、このmy.cnfの25行目にある[mysqld]の下に

character-set-server = utf8
skip-character-set-client-handshake

を追加します。これで、MySQLの文字コードがUTF-8へ設定されます。あとは

MySQLサーバーを再起動すれば文字コードがUTF-8になります。

実際に、

mysql> show variables like 'char%';

として

mysql> show variables like 'char%';
+--------------------------+--------------------------------------------+
| Variable_name            | Value                                      |
+--------------------------+--------------------------------------------+
| character_set_client     | utf8                                       |
| character_set_connection | utf8                                       |
| character_set_database   | utf8                                       |
| character_set_filesystem | binary                                     |
| character_set_results    | utf8                                       |
| character_set_server     | utf8                                       |
| character_set_system     | utf8                                       |
| character_sets_dir       | /Applications/MAMP/Library/share/charsets/ |
+--------------------------+--------------------------------------------+

となればUTF-8に変更されています。

これまで使ってきたデータベースmy_dbの文字コード(character_set_database)は以前のままです。

ですから、一度DROP命令でmy_dbを削除して作り直す必要があります。

面倒ですが、データベースとテーブルを作り直してください。

 この調子で、近藤武蔵さんのデータもいれていきます。

mysql> INSERT INTO my_tb VALUES('kondo','近藤武蔵',24);

とすると

mysql> INSERT INTO my_tb VALUES(‘kondo’,’近藤武蔵’,24);
Query OK, 1 row affected (0.01 sec)

となります。テーブルをつくるときに設定した順(id,name,age)ならわざわざmy_tb(…)と入力する必要がありません。

テーブルの内容をチェックする

最後に入力したデータを確認して終わりましょう。

SELECT カラム名1,カラム名2… FROM テーブル名;

により、テーブルのカラムを表示できます。

では

mysql> SELECT id,name,age FROM my_tb;

としてみます。すると

mysql> SELECT id,name,age FROM my_tb;
+-------+--------------+------+
| id    | name         | age  |
+-------+--------------+------+
| taro  | 山田太郎     |   21 |
| hane  | 佐藤花子     |   12 |
| kondo | 近藤武蔵     |   24 |
+-------+--------------+------+
3 rows in set (0.00 sec)

と表示されます。きちんとデータが入力されていることがわかりますね。

著者:安井 真人(やすい まさと)