Python入門トップページ


目次

  1. SQLite を利用してみよう
  2. SQLite でテーブルを作成してデータを投入してみよう
  3. MySQL の準備を行おう
  4. MySQL を利用してみよう
  5. MySQL でテーブルを作成してデータを投入してみよう

データベースを利用してみよう

MySQL の準備を行おう

ここでは,Ubuntu (IPアドレス 192.168.58.101)にインストールした MySQL にデータベースを作成し,リモートホスト (Windows, Mac,または Ubuntu) からアクセスできるように設定します.なおリモートホストの IPアドレスは 192.168.58.100 とします.あらかじめ次のページを順に参考にして仮想開発環境を構築します.

  1. 仮想開発環境の構築 (Windows 10 + Ubuntu 22.04)
  2. VirtualBox のダウンロードとインストール
  3. Vagrant のダウンロードとインストール
  4. Visual Studio Code のダウンロードとインストール
  5. Vagrant から Ubuntu をインストール
  6. Ubuntu の基本設定と各種ソフトウェアのインストール

管理者権限でのログイン

MySQL に管理者権限(root ユーザ)でログインします.データベースの一覧を表示するには SHOW DATABASES; コマンドを利用します.管理者権限では全てのデータベースを利用することができます.

vagrant@ubuntu2204:~$ mysql -u root -p ⏎
Enter password: # パスワードを入力(表示されない)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

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

mysql>

目次に戻る

データベースの作成

管理者権限があるとデータベースを作成することができます.例えば testDB いう名称のデータベースを作成します.

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

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

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

mysql>

目次に戻る

ユーザの作成

ユーザを作成し,そのユーザに testDB データベースへのアクセス権限を与えます.ユーザ情報は mysql データベースの user テーブルに格納されています.具体的には CREATE USER コマンドで localhost から接続可能な dbuser というユーザを作成し,パスワードを設定します.その後,GRANT コマンドで testDB の全てのテーブルに対して,全ての権限をそのユーザに許可します.その後,FLUSH PRIVILEGES コマンドで権限の変更を有効化します.

mysql> USE mysql; ⏎
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT User, Host FROM user; ⏎
+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

mysql> CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'hogehogehoge'; ⏎
Query OK, 0 rows affected (0.02 sec)

mysql> GRANT ALL PRIVILEGES ON testDB.* TO 'dbuser'@'localhost'; ⏎
Query OK, 0 rows affected (0.02 sec)

mysql> FLUSH PRIVILEGES; ⏎
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT User, Host FROM user; ⏎
+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| dbuser           | localhost |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

mysql> EXIT ⏎
Bye
vagrant@ubuntu2204:~$

目次に戻る

ログインとデータベースの変更

上で作成したユーザ (dbuser) で MySQL にログインします.このユーザは testDB データベースにだけ権限が付与されています.このため,root ユーザで表示されていた mysql データベースや sys データベースを見られないことに注意していください.また,利用するデータベースを変更するには USE コマンドを使います.

vagrant@ubuntu2204:~$ mysql -u dbuser -p ⏎
Enter password: # パスワードを入力(表示されない)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES; ⏎
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| testDB             |
+--------------------+
3 rows in set (0.00 sec)

mysql> USE testDB; ⏎
Database changed
mysql>

目次に戻る

テーブルの作成

testDB データベースに staffs テーブルを作成してみます.このテーブルは idnameagedepartment という 4 つの属性(フィールド,列)を持つものとします.

mysql> SHOW TABLES; ⏎
Empty set (0.00 sec)

mysql> CREATE TABLE staffs (
       id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
       name VARCHAR(32),
       age INT,
       department VARCHAR(32)
       )
       ENGINE=InnoDB CHARACTER SET utf8mb4; ⏎
Query OK, 0 rows affected (0.02 sec)

mysql> SHOW TABLES; ⏎
+------------------+
| Tables_in_testDB |
+------------------+
| staffs           |
+------------------+
1 row in set (0.00 sec)

mysql>

目次に戻る

テーブルの確認

テーブルの定義を確認するひとつのコマンドが DESC です.コマンドの最後には ; または \G を入力する必要があります.; では表形式で結果が出力され,\G では縦に並べて結果が出力されます.なお,日本語 Windows 環境では円マークでバックスラッシュを入力できます.

mysql> DESC staffs; ⏎
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(32)  | YES  |     | NULL    |                |
| age        | int          | YES  |     | NULL    |                |
| department | varchar(32)  | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> DESC staffs\G ⏎
*************************** 1. row ***************************
  Field: id
   Type: int unsigned
   Null: NO
    Key: PRI
Default: NULL
  Extra: auto_increment
*************************** 2. row ***************************
  Field: name
   Type: varchar(32)
   Null: YES
    Key:
Default: NULL
  Extra:
*************************** 3. row ***************************
  Field: age
   Type: int
   Null: YES
    Key:
Default: NULL
  Extra:
*************************** 4. row ***************************
  Field: department
   Type: varchar(32)
   Null: YES
    Key:
Default: NULL
  Extra:
4 rows in set (0.00 sec)

mysql>

テーブルの定義情報を確認するためのもうひとつのコマンドが SHOW CREATE TABLE です.このコマンドでは MySQL のストレージエンジンの種類 (InnoDB が標準,そのほかに MyISAM など) や文字コードなどの情報も確認で可能です.

mysql> SHOW CREATE TABLE staffs; ⏎
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                                                                                                                                                        |
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| staffs | CREATE TABLE `staffs` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `department` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SHOW CREATE TABLE staffs\G ⏎
*************************** 1. row ***************************
       Table: staffs
Create Table: CREATE TABLE `staffs` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `department` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

mysql>

目次に戻る

データの投入

テーブルにデータを投入するには INSERT コマンドを利用します.このとき,複数のデータを一気に投入できること,また,id フィールドには AUTO_INCREMENT が設定されているため自動的に id が設定されていることに注意してください.

mysql> INSERT INTO staffs (name, age, department) VALUES
   ('藤川',23,'営業部'),
   ('藤本',35,'人事部'); ⏎
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM staffs; ⏎
+----+--------+------+------------+
| id | name   | age  | department |
+----+--------+------+------------+
|  1 | 藤川   |   23 | 営業部     |
|  2 | 藤本   |   35 | 人事部     |
+----+--------+------+------------+
2 rows in set (0.01 sec)

mysql> INSERT INTO staffs (name, age, department) VALUES
   ('藤枝',32,'製造部'),
   ('藤原',48,'営業部'),
   ('藤森',44,'人事部'),
   ('藤平',28,'製造部'),
   ('藤谷',38,'営業部'); ⏎
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM staffs; ⏎
+----+--------+------+------------+
| id | name   | age  | department |
+----+--------+------+------------+
|  1 | 藤川   |   23 | 営業部     |
|  2 | 藤本   |   35 | 人事部     |
|  3 | 藤枝   |   32 | 製造部     |
|  4 | 藤原   |   48 | 営業部     |
|  5 | 藤森   |   44 | 人事部     |
|  6 | 藤平   |   28 | 製造部     |
|  7 | 藤谷   |   38 | 営業部     |
+----+--------+------+------------+
7 rows in set (0.00 sec)

mysql> exit ⏎
%

目次に戻る

リモートユーザの登録

次に,リモートのクライアントからデータベースサーバにログインするためにリモートユーザの登録を行います.サーバ側の操作で root ユーザで MySQL にログインします.ユーザ情報が格納されているのは mysql データベースです.

vagrant@ubuntu2204:~$ mysql -u root -p ⏎
Enter password: # パスワードを入力(表示されない)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES; ⏎
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testDB             |
+--------------------+
5 rows in set (0.01 sec)

mysql>

ユーザの一覧を確認します.利用するデータベースを USE で指定しなくとも,データベース名.テーブル名 でデータを取得できます.dbuser というユーザが登録されていますが,localhost からのアクセスしか許可されていません.

mysql> SELECT User, Host FROM mysql.user; ⏎
+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| dbuser           | localhost |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

mysql>

リモートからアクセスできるように IP アドレス(ここでは 192.168.56.100)を指定して dbuser を作成し,パスワードを設定します.さらに,testDB データベースの全てのテーブルに権限を与えます.

mysql> CREATE USER 'dbuser'@'192.168.56.100' IDENTIFIED BY 'hogehogehoge'; ⏎
Query OK, 0 rows affected (0.04 sec)

mysql> GRANT ALL PRIVILEGES ON testDB.* TO 'dbuser'@'192.168.56.100'; ⏎
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES; ⏎
Query OK, 0 rows affected (0.02 sec)

mysql>

ユーザが登録できていることを確認します.

mysql> SELECT User, Host FROM mysql.user; ⏎
+------------------+----------------+
| User             | Host           |
+------------------+----------------+
| dbuser           | 192.168.56.100 |
| dbuser           | localhost      |
| debian-sys-maint | localhost      |
| mysql.infoschema | localhost      |
| mysql.session    | localhost      |
| mysql.sys        | localhost      |
| root             | localhost      |
+------------------+----------------+
7 rows in set (0.00 sec)

mysql>

目次に戻る