茨の道も一歩から

インフラ構築からプログラミング(Python・JavaScript)までITに関するブログです。

102日目:データベース

Pythonプログラミングの講義が終わり、今日から最終講義のデータベースです。

【参考テキスト】

【目次】

  • 第1章 データベースって何だろう-その用途と役割-
  • 第2章 リレーショナルデータベースって何だろう-最も代表的なデータベース-
  • 第3章 データベースにまつわるお金の話-イニシャルコストとランニングコスト
  • 第4章 データベースとアーキテクチャ構成-堅牢かつ高速なシステムを構築するために-
  • 第5章 DBMSを操作する際の基本知識-操作する前に知っておくこと
  • 第6章 SQL文の基本を学ぼう-SELECT文を理解する-
  • 第7章 トランザクションと同時実行制御-複数のクエリをまとめる-
  • 第8章 テーブル設計の基礎-テーブルの概念と正規形-
  • 第9章 バックアップとリカバリ-障害に備える仕組み-
  • Appendix パフォーマンスを考えよう-性能を向上させるために-

【講義内容】

  • 第1章 データベースって何だろう-その用途と役割-

【ワンポイント】

  • 講義は初心者向けなので、自分でMySQLの環境構築して自習。

MySQL

環境構築

  • Windows10 Pro (64bit)
  • MySQL8.0.22 (64bit zip版): Download

MySQL8インストール

環境変数にPathを追加

C:\mysql8\bin

データベース初期化

  • 初期パスワードを控えておく
    • [Server] A temporary password is generated for root@localhost: b0*fK/XuuobC
mysqld --initialize --console

VCRUNTIME140_1.dllのエラーが発生した場合にインストール

データベース起動

mysqld --console

ログイン

mysql -u root -p

パスワードの変更

ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourPassword';

パスワードの確認

SELECT user,host,authentication_string FROM mysql.user;

データベースの停止

mysqladmin shutdown -u root -p

データベースの管理

ユーザの追加

CREATE USER mysql@localhost;

新規ユーザのパスワードを設定

SET PASSWORD FOR mysql@localhost='NewPassword';

データベースの作成

CREATE DATABASE kaggle;

権限の付与

GRANT ALL ON kaggle.* TO mysql@localhost;

データベースの選択

USE kaggle;

テーブルの作成

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    text TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT charset=utf8;

テーブルの確認

DESC articles;

出力

+------------+--------------+------+-----+-------------------+-----------------------------------------------+
| Field      | Type         | Null | Key | Default           | Extra                                         |
+------------+--------------+------+-----+-------------------+-----------------------------------------------+
| id         | int unsigned | NO   | PRI | NULL              | auto_increment                                |
| title      | varchar(255) | NO   |     | NULL              |                                               |
| text       | text         | NO   |     | NULL              |                                               |
| created_at | datetime     | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
| updated_at | datetime     | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
+------------+--------------+------+-----+-------------------+-----------------------------------------------+
5 rows in set (0.02 sec)

データの追加

INSERT INTO articles (
  title,
  text
) VALUES (
  'MySQL8インストール手順',
  'https://dev.mysql.com/doc/refman/8.0/en/installing.html'
), (
  'Djangoアプリ制作について',
  'Djangoは、PythonでWebアプリケーションを制作するための「フレームワーク」です。'
);

データの参照

SELECT * FROM articles;

データの更新

UPDATE articles SET text='<a href="https://dev.mysql.com/doc/refman/8.0/en/installing.html">MySQL 8.0 Installing</a>'
WHERE id=1;

データの削除

DELETE FROM articles WHERE created_at < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 MONTH);

【今日の積み上げ】

  • データベースの基礎