5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【SQLに慣れる】データベース・テーブル・カラムの作成

Last updated at Posted at 2018-07-06

データベースからテーブル・カラムの作成について、基本コマンドを確認する。

使用DBMS

MySQL Version 5.7.22(当記事内では、MySQL特有のコマンドがあるかもしれません。)

データベース

作成

CREATE DATABASEコマンドsample_dbデータベースを作成する。

mysql> CREATE DATABASE sample_db;
Query OK, 1 row affected (0.01 sec)

使用DBの切り替え

useコマンドで使用するデータベースを切り替える。

mysql> use sample_db
Database changed

DBの一覧を表示

SHOWコマンドでデータベースの一覧を表示する。

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| auth               |
| camp               |
| db1                |
| db2                |
| larabbs            |
| login              |
| mysql              |
| performance_schema |
| phpmyadmin         |
| sample_db          |
| shop               |
| sys                |
| testcake_db        |
| testlara           |
+--------------------+
15 rows in set (0.01 sec)

現在の使用DBを表示

SELECT DATABASE();で、現在使用しているデータベースを表示できる。

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| sample_db  |
+------------+
1 row in set (0.00 sec)

プロンプトの設定

SELECT DATABASE();で毎回確認するのは面倒くさい・・・。こんな時は、プロンプトを設定してユーザー名や使用データベースを常時表示させることもできる。(再起動したら設定がもとに戻ってしまったが。)

プロンプトはpromptコマンドで設定可能だ。

mysql> prompt \u:\d>
PROMPT set to '\u:\d>'
yuki:(none)>

\uはユーザー名を、\dはデータベース名を意味する。つまり、\u:\d>を指定すれば、プロンプトはユーザー名:データベース名>の状態で表示される。(現在はデータベースが選択されていないため、(none)の表示となっている。)

ちなみにMacのターミナルで実行した場合、\の部分を¥に置き換えると正しく反映されない。

削除

DROP DATABASEコマンドでデータベースを削除できる。(今回、コマンドの実行はしていない。)

yuki:sample_db>DROP DATABASE sample_db;

テーブル

作成

CREATE TABLEコマンドmemberテーブルを作成する。

カラムは以下の内容で設定する。

カラム名 データ型 制約
id INT PRIMARY KEY, AUTO_INCREMENT
namae VARCHAR(4)
job VARCHAR(10)
yuki:sample_db> CREATE TABLE member (
    -> id INT PRIMARY KEY AUTO_INCREMENT,
    -> namae VARCHAR(4),
    -> job VARCHAR(10)
    -> );
Query OK, 0 rows affected (0.01 sec)

テーブルの一覧を表示

SHOWコマンドを使用して、データベース内のテーブルの一覧を表示させる。

yuki:sample_db>SHOW TABLES;
+---------------------+
| Tables_in_sample_db |
+---------------------+
| member              |
| money_check         |
+---------------------+
2 rows in set (0.01 sec)

削除

DROP TABLEコマンドでテーブルを削除できる。(今回、コマンドの実行はしていない。)

IF EXISTSを加えると、memberテーブルが実在した場合のみ、コマンドが実行される。

yuki:sample_db>DROP TABLE IF EXISTS member;

カラム構造を表示

DESCコマンドでテーブル内のカラム構造が表示できる。

yuki:sample_db>DESC member;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| namae | varchar(4)  | YES  |     | NULL    |                |
| job   | varchar(10) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

カラムの追加

ageカラムを追加する。カラムを追加するときは、ALTER TABLEコマンドADDを加えた構文を使う。

カラム名 制約
age INT
yuki:sample_db>ALTER TABLE member ADD age INT;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

yuki:sample_db>DESC member;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| namae | varchar(4)  | YES  |     | NULL    |                |
| job   | varchar(10) | YES  |     | NULL    |                |
| age   | int(11)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

カラムの編集

データ型の変更

namaeカラムが4文字限定では厳しいので、これを10文字に変更したい。名前が4文字限定と言うと、昔のドラクエが連想される。(濁点も1文字としてカウントされたのは良い思い出だ。)

カラムのデータ型を変更するときは、ALTER TABLEコマンドMODIFYを加えた構文を使用する。

yuki:sample_db>ALTER TABLE member MODIFY namae VARCHAR(10);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

yuki:sample_db>DESC member;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| namae | varchar(10) | YES  |     | NULL    |                |
| job   | varchar(10) | YES  |     | NULL    |                |
| age   | int(11)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

カラム名の変更

さらに、namaenameに修正したい。カラム名の変更には、ALTER TABLEコマンドCHANGEを加えた構文を使う。

しかし、この構文では名前の変更だけ行おうとするとエラーが発生してしまう。

yuki:sample_db>ALTER TABLE member CHANGE namae name;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

ここでは、カラムのデータ型も同時に指定しなければならないようだ。先ほどデータ型の変更を行ったが、再度指定してコマンドを実行する。

yuki:sample_db>ALTER TABLE member CHANGE namae name VARCHAR(10);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

これで変更が反映された。

カラム位置の変更

ALTER TABLEコマンドでは、FIRSTAFTER カラム名を指定してカラムの位置を変更することもできる。

yuki:sample_db>ALTER TABLE member CHANGE name name VARCHAR(10) AFTER age;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

yuki:sample_db>DESC member;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| job   | varchar(10) | YES  |     | NULL    |                |
| age   | int(11)     | YES  |     | NULL    |                |
| name  | varchar(10) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

カラムの削除

ageカラムを削除することにした。カラムの削除には、ALTER TABLEコマンドDROPを加えた構文を使用する。

yuki:sample_db>ALTER TABLE member DROP age;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

yuki:sample_db>DESC member;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | YES  |     | NULL    |                |
| job   | varchar(10) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

今回はここまで。

5
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?