のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

MySQL Table生成のコマンドを纏めます!

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気かも。

うまいコーヒーは最高だ。

さて、今日はTableについて、特にテーブルについてまとめてみようと思います。

Table生成について

テーブル生成について

以下の例に基づいて考えてみましょう。

CREATE TABLE IF NOT EXIST user(
id INT NOT NULL AUTO_INCREMENT,
u_name TEXT,
address TEXT,
created timestamp NOT NULL default'0000-00-00 00:00:00',
updated timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
del_flg BOOLEAN,
PRIMARY KEY(id)
);

試しにこれを実行すると…?

Query OK, 0 rows affected (0.04 sec)

おっ、無事に作成されましたね。

もう一度実行すると…?

mysql> CREATE TABLE user
( id INT NOT NULL AUTO_INCREMENT, 
u_name TEXT, 
address TEXT,
created timestamp NOT NULL default'0000-00-00 00:00:00',
updated timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
del_flg BOOLEAN,
PRIMARY KEY(id) );

ERROR 1050 (42S01): Table 'user' already exists

アプリケーションを作成するとき、Tableがないときに実行してほしいケースがあります。

mysql> CREATE TABLE IF NOT EXISTS user(
id INT NOT NULL AUTO_INCREMENT,
u_name TEXT, 
address TEXT, 
created timestamp NOT NULL default'0000-00-00 00:00:00', 
updated timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, 
del_flg BOOLEAN, 
PRIMARY KEY(id) );
Query OK, 0 rows affected, 1 warning (0.00 sec)

IF NOT EXISTSを付け加えることで、達成することができます。

基本構文

テーブルのカラムについてですが、
<column名> <型> <Option> です。

例えば id名の場合、id名はINTでNOT NULL、AUTO_INCREMENTなOptionがついています。

型について

columnにも型があります

内容
INT 数値
CHAR 文字(文字が可変)
VARCHAR 文字(文字幅が固定長)
TEXT テキスト(可変長)
timestamp 時間
DATE 日付
TIME time
BOOLEAN Boolean値(True or Falth)

よく使うOption

AUTO_INCREMENT 自動で増加
NOT NULL NULLを許容しない

テーブル情報を見たい時

mysql> DESC user;                                                          
+---------+------------+------+-----+---------------------+-----------------------------+
| Field   | Type       | Null | Key | Default             | Extra                       |
+---------+------------+------+-----+---------------------+-----------------------------+
| id      | int(11)    | NO   | PRI | NULL                | auto_increment              |
| u_name  | text       | YES  |     | NULL                |                             |
| address | text       | YES  |     | NULL                |                             |
| created | timestamp  | NO   |     | 0000-00-00 00:00:00 |                             |
| updated | timestamp  | YES  |     | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
| del_flg | tinyint(1) | YES  |     | NULL                |                             |
+---------+------------+------+-----+---------------------+-----------------------------+
6 rows in set (0.01 sec)

CREATE文を出力

違う環境でCreateを行う時とかに使える内容となっております。

mysql> SHOW CREATE TABLE user;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                    |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user  | CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `u_name` text,
  `address` text,
  `created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `del_flg` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

テーブルを見たいとき

テーブルの一覧を確認しましょう。

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

削除

テーブルの削除をするときはこんな感じ。

mysql> Drop table user;
Query OK, 0 rows affected (0.03 sec)

感想

なんというか、こんなコマンドあったんだなぁとふと感じる今日でした。