ハッカソンでバックエンドも一部担当し若干FastAPIを触ってみました。
DB周りは他の方がやってくれていたのでほぼ触っていないのですが、バックエンドやるからには必須スキルなのでなんとか身につけたいと思います。
まずはSQLのお約束
- 慣習としてコマンドは
CREATE DATABASE
のように大文字で記述します。(コマンド打つ時は小文字で打ったりしますが) - データベース名、テーブル名、カラム名などコマンド以外の部分は
this_is_database
のようにスネークケースで記述します。 - SQL文の末尾は
CREATE DATABASE this_is_database;
のように基本的に;
となります。
コマンドCREATE DATABASEとは
読んで字のごとくデータベースを作成するコマンドです。
Envaderの仮想環境でコマンドを打ちながら学んでいきます。
CREATE DATABASE this_is_database;
これでデータベースが作成されます。
すでに存在するデータベース名で作成しようとするとエラーが出るので、IF NOT EXISTS
と記述すればエラーを回避できます。
CREATE DATABASE IF NOT EXISTS this_is_database;
実際にDBが作成されたかを見るにはSHOW DATABASES;
です。
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| food_app |
| information_schema |
| mysql |
| performance_schema |
| sys |
| this_is_database |
+--------------------+
6 rows in set (0.01 sec)
this_is_database
が作成されていることを確認できました。
文字コードを指定する
デフォルトではutf8
となっていますので必要に応じて変更します。
CREATE DATABASE DB名 CHARACTER SET 文字コード;
照合順序を指定する
デフォルトでutf8_general_ci
となっています。ソート順を指定する場合に指定します。
CREATE DATABASE DB名 COLLATE 照合順序;
文字コードと照合順序をまとめて指定することもできます
照合順序と文字コードはセットで扱います。異なる文字セットを指定するとエラーが出ます。
CREATE DATABASE DB名 CHARACTER SET 文字セット COLLATE 照合順序;
DB作成時にwarningが出てしまったら
SHOW WARNINGS;
コマンドを入力することで詳細を表示できます。
コードなどを元にググって対処方法を見つけましょう。
# 例
mysql> CREATE DATABASE IF NOT EXISTS my_sample_list;
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------------------+
| Note | 1007 | Can't create database 'my_sample_list'; database exists |
+-------+------+---------------------------------------------------------+
1 row in set (0.00 sec)
Can't create database 'my_sample_list'; database exists
(my_sample_listというデータベースが既に存在するのでデータベースを作成することができませんでした。)
同名でデータベース作成しようとしたときに出力するエラー文と同じものですが、IF NOT EXISTS
と指定してDB作成コマンドを打ったため警告(warning)として出力されています。
DB名を別にして対処しましょう。
コード引用:データベースの作成
学習のまとめ
だいたいEnvaderで触ってみてわからないところは検索して幾つか参考になるページを見つけて理解を深めるというやり方をやっています。
inputとOutputを並行してできるので自分の中ではかなり学習効果が高いと思っています。
参考にした記事
皆さんの知見のおかげでなんとか理解ができています。ありがとうございます。
これまでの学習