freedom-_-qの勉強履歴

メモ書きが主になるかと思います。勉強強制のために一日一記事目指してます。頭良くないので間違いが多々あるかと思います。

MySQLチュートリアル(作成編)

目次

データベースの確認

デフォルトでどんなデータベースが作成されているか確認してみる。
全てのデータベースは以下コマンドの実行で取得できる。 LIKEとWHEREでフィルタリングできるらしい(未確認)。

mysql>SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

テーブルの確認

テーブル一覧取得はFROMでデータベース名を指定する。

SHOW TABLES FROM {Database名};

information_schema内のテーブル一覧▼

+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| ADMINISTRABLE_ROLE_AUTHORIZATIONS     |
| APPLICABLE_ROLES                      |
| CHARACTER_SETS                        |
| CHECK_CONSTRAINTS                     |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS                               |
| COLUMNS_EXTENSIONS                    |
| COLUMN_PRIVILEGES                     |
| COLUMN_STATISTICS                     |
| ENABLED_ROLES                         |
| ENGINES                               |
| EVENTS                                |
| FILES                                 |
| INNODB_BUFFER_PAGE                    |
| INNODB_BUFFER_PAGE_LRU                |
| INNODB_BUFFER_POOL_STATS              |
| INNODB_CACHED_INDEXES                 |
| INNODB_CMP                            |
| INNODB_CMPMEM                         |
| INNODB_CMPMEM_RESET                   |
| INNODB_CMP_PER_INDEX                  |
| INNODB_CMP_PER_INDEX_RESET            |
| INNODB_CMP_RESET                      |
| INNODB_COLUMNS                        |
| INNODB_DATAFILES                      |
| INNODB_FIELDS                         |
| INNODB_FOREIGN                        |
| INNODB_FOREIGN_COLS                   |
| INNODB_FT_BEING_DELETED               |
| INNODB_FT_CONFIG                      |
| INNODB_FT_DEFAULT_STOPWORD            |
| INNODB_FT_DELETED                     |
| INNODB_FT_INDEX_CACHE                 |
| INNODB_FT_INDEX_TABLE                 |
| INNODB_INDEXES                        |
| INNODB_METRICS                        |
| INNODB_SESSION_TEMP_TABLESPACES       |
| INNODB_TABLES                         |
| INNODB_TABLESPACES                    |
| INNODB_TABLESPACES_BRIEF              |
| INNODB_TABLESTATS                     |
| INNODB_TEMP_TABLE_INFO                |
| INNODB_TRX                            |
| INNODB_VIRTUAL                        |
| KEYWORDS                              |
| KEY_COLUMN_USAGE                      |
| OPTIMIZER_TRACE                       |
| PARAMETERS                            |
| PARTITIONS                            |
| PLUGINS                               |
| PROCESSLIST                           |
| PROFILING                             |
| REFERENTIAL_CONSTRAINTS               |
| RESOURCE_GROUPS                       |
| ROLE_COLUMN_GRANTS                    |
| ROLE_ROUTINE_GRANTS                   |
| ROLE_TABLE_GRANTS                     |
| ROUTINES                              |
| SCHEMATA                              |
| SCHEMATA_EXTENSIONS                   |
| SCHEMA_PRIVILEGES                     |
| STATISTICS                            |
| ST_GEOMETRY_COLUMNS                   |
| ST_SPATIAL_REFERENCE_SYSTEMS          |
| ST_UNITS_OF_MEASURE                   |
| TABLES                                |
| TABLESPACES                           |
| TABLESPACES_EXTENSIONS                |
| TABLES_EXTENSIONS                     |
| TABLE_CONSTRAINTS                     |
| TABLE_CONSTRAINTS_EXTENSIONS          |
| TABLE_PRIVILEGES                      |
| TRIGGERS                              |
| USER_ATTRIBUTES                       |
| USER_PRIVILEGES                       |
| VIEWS                                 |
| VIEW_ROUTINE_USAGE                    |
| VIEW_TABLE_USAGE                      |
+---------------------------------------+
79 rows in set (0.01 sec)

データベースの作成

test_databaseを作成する。SHOW DATABASESで作成されていることが確認できる。

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

データベースの選択

選択はUSEを使う。

mysql> USE test_database;
Database changed

選択するとコマンドの省略ができる。
例えば、以下のようにテーブル一覧コマンドのFROM {Database名}が不要になる。

SHOW TABLES;

テーブルの作成

テーブル作成はオプションが多いので、公式リファレンスを参照した方がよさそう。
データベースを選択してあれば、{データベース名}は省略できる。

CREATE TABLE {データベース名}.{テーブル名}(
    {カラム名} {データ型} {オプション},
)

例えば、ユーザ情報テーブルは以下コマンドで作成できる。

mysql> CREATE TABLE users(
     id INT(3) ZEROFILL AUTO_INCREMENT NOT NULL,
    name VARCHAR(30) NOT NULL,
    birth DATE NOT NULL,
    PRIMARY KEY (id));
Query OK, 0 rows affected, 2 warnings (0.03 sec)

SHOW TABLESで確認すると、作成できていることがわかる。

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

中身はもちろん空っぽである。

mysql> SELECT * FROM users;
Empty set (0.00 sec)

テーブルにデータを追加

追加方法については、「位置引数的に追加」と「名前付き引数的に追加」と「全部規定値で追加」がある。
idAUTO_INCREMENTで定義したため、DEFAULTで自動採番ができる。

位置引数的に追加

mysql> INSERT INTO users VALUES(DEFAULT, 'Yamada Tarou', '2000-1-1');
Query OK, 1 row affected (0.01 sec)

名前付き引数的に追加

INSERT INTO users (id, name, birth) VALUES(DEFAULT, 'Yamada Hanako', '2000-2-2');
Query OK, 1 row affected (0.01 sec)

名前で指定しているため、若干省略できる。

INSERT INTO users (name, birth) VALUES('Yamada Jirou', '2000-3-3');
Query OK, 1 row affected (0.01 sec)

もちろん順番が違ってもOK。

INSERT INTO users (birth, name) VALUES('2020-4-4', 'Yamada Ichirou');
Query OK, 1 row affected (0.01 sec)

全部規定値で追加

今回は規定値を持たせていないカラムがあるため、実行できない。

INSERT INTO {テーブル名}() VALUES();

無事追加されていることが確認できた。

SELECT * FROM users;
+-----+----------------+------------+
| id  | name           | birth      |
+-----+----------------+------------+
| 001 | Yamada Tarou   | 2000-01-01 |
| 002 | Yamada Hanako  | 2000-02-02 |
| 003 | Yamada Jirou   | 2000-03-03 |
| 004 | Yamada Ichirou | 2020-04-04 |
+-----+----------------+------------+
4 rows in set (0.00 sec)

VALUES以降を複数にすることでまとめて追加もできる。

INSERT INTO {テーブル名} VALUES
 (値1, 値2, ...),
 (値1, 値2, ...), ...
INSERT INTO {テーブル名} (カラム名1, カラム名2, ...) VALUES
 (値1, 値2, ...),
 (値1, 値2, ...), ...