学習11日目:MySQLのオープニング。

学習時間について。

  • Day:11
  • Today:4h
  • Total:78h

今日の学習内容。

データベースとは。

  • ソフトウェア(ミドルウェア)
  • たくさんのデータを一元管理
  • データの保存取得特化
  • 基本的にはテキストデータが対象
    • 画像や動画の扱いには向かない
  • DBとも呼ぶ
  • データを永続的に保存するのに適している
    • あらかじめ定義された以上にはデータが増減せず、かつデータ量が少ないような場合はファイル保存でも良い
  • 使用例
    • ユーザー登録
    • メッセージの投稿
    • Facebookの友達やTwitterのフォロワー管理
  • CRUD(クラッド)とはデータベースがデータを扱う基本操作のこと
    • Create(作成・保存)=>INSERT
    • Read(取得)=>SELECT
    • Update(更新)=>UPDATE
    • Delete(削除)=>DELETE

リレーショナルデータベース。

  • リレーショナルデータベース管理システム(RDBMS)
    • リレーショナルデータベースを管理するシステム
  • 1つのアプリケーションに対して1つのデータベース
    • 1つのデータベースの中に複数のテーブル(表)
      • Excelシートと同じような縦横のテーブル
  • テーブルは、カラム(縦)とレコード(横)で構成
    • カラムに、保存されるデータの制約を設定可能=>整合性を担保
      • 例:NULL許容/禁止、主キー(プライマリーキー)
    • カラムには名前があり、レコードにその具体的な値を設定
  • データの保存や取得などの処理に、SQLという言語を使用
有名なRDBMS
  • Oracle Database
  • Microsoft SQL Server
  • MySQL
  • PostgreSQL
  • SQLite
SQLの役割
  • データ操作
    • CRUDのこと
  • データ定義
    • データ自体ではなく、データを格納するためのデータベースやテーブルを作成
    • 例:CREATEやDROP
  • データ制御
    • データにアクセスできるアカウントの制御

MySQLをインストール。使うにはターミナルでパスを通す必要がある。

MySQLでデータベースを作成。

$ mysql -u root -p

mysql> CREATE DATABASE bookstore default character set utf8;
  1. データベースサーバへ接続
  2. データベースを作成
    1. CREATE DATABASE bookstore
  3. データベースに日本を含めるよう指定
    1. default character set utf8
mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| bookstore          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)
mysql> show databases;

データベースの一覧を確認。

mysql> DROP DATABASE bookstore;
  • データを削除する命令
  • 確認無しに即削除される
  • 実際の現場で管理者の確認無しには絶対に行わない
mysql> USE bookstore;
  • データベースを選択する際に使用
  • MySQLサーバに接続するたびに行う必要がある

テーブルを作成してみる。

INT整数
DOUBLE少数
VARCHAR可変長の文字列
TEXT文章用の長い文字列
TIMESTAMP日付時刻型
基本のデータ型
mysql> CREATE TABLE bookstore.books (
    ->     id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ->     title VARCHAR(100),
    ->     price INT,
    ->     created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
    -> );
Query OK, 0 rows affected (0.02 sec)
  1. 特定のデータベースのテーブルを指定
    1. データベース名.テーブル名bookstore.books
    2. USE bookstore; を実行したあとなら bookstore. の部分は不要
  2. ()内にテーブルの設計を書く(下記)
AUTO_INCREMENT

1から始まり次に登録されたら自動的に値が1ずつ増えていく設定。

NOT NULL

値が必ず入る設定。

PRIMARY KEY
  • データを一意に特定するためのカラムがどれか決定する
  • 1つのテーブルに必ず1つは必要
title VARCHAR(100)
  • VARCHAR型は文字列、(100)は100文字と制限
  • VARCHARは必ず最大文字数を指定
DEFAULT CURRENT_TIMESTAMP

デフォルト値として現在日時を保存。

created_at

データ保存と同時に自動的にそのときの現在日時を保存。


コンソールにタイピングする場合、1箇所でも間違えると入力し直さなければならない。なので、長文になるのであれば一度テキスト形式のファイルに上記のSQL文を入力・保存し、それをMySQLクライアントの中から実行するという方法が好ましい。

  1. 拡張子が .sql のファイルを作成
  2. 文をファイルに入力して保存
  3. ファイルのパス(場所)を確認
    1. プロパティ情報を表示するなどして
  4. sourceというMySQLのコマンドを使用して実行
mysql> source ~/workspace/mysql-lesson/create_table_bookstore_books.sql

mysql> show tables;
+---------------------+
| Tables_in_bookstore |
+---------------------+
| books               |
+---------------------+
1 row in set (0.00 sec)

mysql> describe books;
+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL              | auto_increment |
| title      | varchar(100) | YES  |     | NULL              |                |
| price      | int(11)      | YES  |     | NULL              |                |
| created_at | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+

テーブル一覧とテーブル設計内容を確認してみるとこんな感じ。

CRUD操作をしてみる。

C(create)。

/*INSERT構文
INSERT INTO テーブル名 (カラム1, カラム2, ...) VALUES (値1, 値2, ...);
*/

mysql> INSERT INTO books (title, price) VALUES ("はじめてのMySQL", 2980);

created_atDEFAULT CURRENT_TIMESTAMP設定だったので、それぞれ1や現在日時が入る。

R(read)。

/* SELECT構文
SELECT カラム名 FROM テーブル名;
*/

mysql> SELECT * FROM books;
+----+----------------------+-------+---------------------+
| id | title                | price | created_at          |
+----+----------------------+-------+---------------------+
|  3 | はじめてのMySQL       |  2980 | 2020-07-21 19:58:23 |
+----+----------------------+-------+---------------------+
1 row in set (0.00 sec)

*と書くとすべてのカラムを取得できる。

U(update)。

/* UPDATE構文
UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, ...
*/

mysql> UPDATE books SET price = 1480;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM books;
+----+----------------------+-------+---------------------+
| id | title                | price | created_at          |
+----+----------------------+-------+---------------------+
|  3 | はじめてのMySQL       |  1480 | 2020-07-21 19:58:23 |
+----+----------------------+-------+---------------------+
1 row in set (0.00 sec)

price1480に変更されている。

D(delete)。

/* DELETE構文
DELETE FROM テーブル名
*/

mysql> DELETE FROM books;
Query OK, 1 row affected (0.00 sec)

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

今日の反省と明日の目標。

MySQLは何かエディターを使うのかと思っていたけど、コンソールに直書きしていくのね。入力しても本当に入力されたのかが不安で、もう一度実行したら二回分記録されてたりで独特な使い心地がしました。入力画面も原始的でコンピューターに触っている感が強くて面白い。

ワードプレスではサーバーにデータベースがあるから、今まで無縁だったけど慣れていかなきゃだね。。

プログラミング学習は常に知らない概念や言葉ばかりで毎日が新鮮。普段触れているウェブやアプリも裏ではプログラムが動いているってことを想像してしまうようになってしまった今日この頃です。

明日はMySQLの続きを終わらせて、JDBCまで行きたいところ。。

閉じる