テーブルの生成と削除
2014年6月1日:MySQL
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」が数値なので
- id,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 |
テーブルの確認
作成したテーブルを確認してみましょう。
テーブルを確認するには
という命令を使います。実際に
mysql> SHOW TABLES;
とすると
mysql> SHOW TABLES;
+-----------------+
| Tables_in_my_db |
+-----------------+
| my_tb |
+-----------------+
1 row in set (0.00 sec)
となり確かにmy_tbがあることが確認できます。
カラム構造の確認
次にテーブルのカラム構造(id,name,age)を確認してみましょう。
を使い
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)
となります。ここで
- 「Field」:id,name,ageといった項目の名前
- 「Type」:データの型
- 「Null」:何も入力していなくてもOKという意味です。
- 「Default」:値がない場合の値
という意味です。「Key」と「Extra」についてはまた適切なときに説明します。
テーブルの削除
テーブルの削除は
で行います。例えば
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');
すると
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
となります。
もしMacのターミナルを使用した場合は、warningが出るかと思います。
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);
とすると
Query OK, 1 row affected (0.01 sec)
となります。テーブルをつくるときに設定した順(id,name,age)ならわざわざmy_tb(…)と入力する必要がありません。
テーブルの内容をチェックする
最後に入力したデータを確認して終わりましょう。
により、テーブルのカラムを表示できます。
では
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)
と表示されます。きちんとデータが入力されていることがわかりますね。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー