MySQLで家計簿を作る

お金の管理は大事だなと思い始めた今日この頃、
Excelもいいけど、練習も兼ねてSQLで管理しようと思い立ちました。

## 家計簿データベースの準備
家計簿データベースとテーブルを用意します。

```sql:ターミナル
-- mysqlに入る
mysql -u root -p

-- 家計簿データーベースを作成する
mysql> create database kakeibo;

-- 作成したデータベースを確認する
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kakeibo            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

-- kakeiboデータベースを選択する
mysql> use kakeibo;
Database changed

-- 費目管理用のテーブルを作成する
create table himoku (id int not null auto_increment primary key, name varchar(20) not null);

-- 確認する
mysql> show columns from himoku;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

-- 家計簿用テーブルを作成する
create table kakeibo (id int not null auto_increment primary key, item_id int not null, amout int, income int, create_date date not null, foreign key(item_id) references himoku(id));

-- 確認する
mysql> show columns from kakeibo;
+-------------+---------+------+-----+---------+----------------+
| Field       | Type    | Null | Key | Default | Extra          |
+-------------+---------+------+-----+---------+----------------+
| id          | int(11) | NO   | PRI | NULL    | auto_increment |
| item_id     | int(11) | NO   | MUL | NULL    |                |
| amout       | int(11) | YES  |     | NULL    |                |
| income      | int(11) | YES  |     | NULL    |                |
| create_date | date    | NO   |     | NULL    |                |
+-------------+---------+------+-----+---------+----------------+
5 rows in set (0.01 sec)
```

## データを追加して確認
```sql:ターミナル
-- Insert文でデータを追加
mysql> insert into himoku (name) values ('飲食費');

mysql> select * from himoku;
+----+----------------+
| id | name           |
+----+----------------+
|  1 | 飲食費          |
+----+----------------+
1 rows in set (0.00 sec)

-- kakeiboテーブルに詳細カラムを追加する
mysql> alter table kakeibo add detail varchar(100);

mysql> show columns from kakeibo;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| item_id     | int(11)      | NO   | MUL | NULL    |                |
| amout       | int(11)      | YES  |     | NULL    |                |
| income      | int(11)      | YES  |     | NULL    |                |
| create_date | date         | NO   |     | NULL    |                |
| detail      | varchar(100) | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

-- kakeiboテーブルにデータを追加する
mysql> insert into kakeibo (item_id, amout, create_date) values (1, 1605, '2022-12-11');
Query OK, 1 row affected (0.00 sec)

mysql> select * from kakeibo;
+----+---------+-------+--------+-------------+--------+
| id | item_id | amout | income | create_date | detail |
+----+---------+-------+--------+-------------+--------+
|  1 |       1 |  1605 |   NULL | 2022-12-11  | NULL   |
+----+---------+-------+--------+-------------+--------+
1 row in set (0.00 sec)

```

簡単な家計簿ができました。

## 参考資料
[MySQLの使い方](https://www.javadrive.jp/mysql/)
[MySQLでテーブルのカラムを表示して確認する](https://blog.mothule.com/db/mysql/db-mysql-show-columns)
[【SQL入門】外部キーとは？主キーとの関係や作成方法について解説](https://www.sejuku.net/blog/54072)