データベースとSQL
こんにちは、nekoです!
SQLを学習しました。知識の整理と定着のため学習内容のまとめをしていきたいと思います。
データベースとは
情報(データ)の基地(ベース)のこと。データを一箇所に集めて、いつでもすぐに利用できるようにしたものです。データベースを使用すると得られるメリットは以下のとおりです。
- 大量のデータの検索・登録・修正・削除を素早く簡単にできる
- 同時に複数の人が利用してもデータに矛盾が生じない(同時実行制御)
- データが飛ばないように対策できる(耐障害性)
- データが流出しない(セキュリティ)
データベースの種類
データベースにはいくつか種類がありますが、現在はリレーショナルデータベースが主流となっています。
- 階層型データベース
- リレーショナルデータベース
- オブジェクト指向データベース
- XMLデータベース
- NoSQLデータベース
リレーショナルデータベースとは
集合(リレーショナル)したデータベースのこと。一般的には二次元表のことをいいます。リレーショナルデータベースはプログラム言語を使わなくてもデータを簡単に操作できることが特徴のひとつです。
複数の製品がありますが、今回はMySQLについて見ていきましょう。
MySQLとは
MySQLの特徴は以下のとおりです。
- オープンソース(ソースコードが無償で公開されていること)
- 処理が高速で信頼性があり使いやすい
- 世界中の多くの企業に利用されている
SQLとは
リレーショナルデータベースがデータ操作のために備えている言語のことです。まるで英語を話すかのように、表からデータを操作できることが最大の特徴です。基本は以下の4つの操作をします。
- SELECT(検索)
- INSERT(登録)
- UPDATA(更新)
- DELETE(削除)
SQL文の基本ルール
- 文の最後に
;
をつける - キーワードの大文字、小文字は区別されない
- ただしテーブルに保存されているデータは大文字、小文字が区別されるので注意する
- SQL文の中で文字列を記述するときは
'
で文字列を囲う - 単語は半角スペース、改行で区切る
MySQLの基本の流れ
- MySQLに接続する
- MySQLに命令する
- DBを作成する(SQL文)
- テーブルを作成する(SQL文)
- テーブルにデータを登録する(SQL文)
- テーブルからデータを取得する(SQL文)
- MySQLとの接続を切断する
MySQLに接続する
DockerでMySQLに接続するには以下の方法をとります。
appコンテナ(PHP)とdbコンテナ(MySQL)が定義されていて、appコンテナからdbコンテナに接続しています。
mysql -h ホスト名 -u ユーザー名 -D データベース名 -p
- -h:host ホスト名
- -u:user ユーザー名
- -D:database データベース名(大文字)
- -p:password セキュア(値を指定しないとターミナルが入力を求め、入力時に表示されないため)
MySQLとの接続を切断する
quitまたはexitどちらでもOKです。
quit
// または
exit
テーブルを作成する
CREATE TABLE [IF NOT EXISTS] <テーブル名> (
<列名1><data_type:><column_definition:>,
<列名2><データ型><制約>,
...
) <テーブルオプション>;
命名ルール
データベース名、テーブル名、列名の命名にはルールがあり、半角文字アルファベット、数字、アンダーバー以外を使ってはいけません。また、名前の最初は半角アルファベットにしなければならず、名前を重複してはいけません。
データ型
列ごとにデータの種類であるデータ型を宣言します。データ型にはたくさんの種類があり、よく使われるものでINTEGER(整数)
、VARCHAR(文字列)
、TIMESTAMP(日付と時間の両方を含む値)
などがあります。
制約
列に入れるデータに制限や条件をかけます。制約にもたくさんの種類があり、よく使われるのもでNOT NULL(データを必ず入れること)
、PRIMARY KEY(重複しない値、一意の識別できる値であること)
、AUTO_INCREMENT(データを追加したときに自動で付与される数字であること)、
DEFAULT CURRENT_TIMESTAMP(対象の列に値を指定しなかった場合はデフォルト値が現在のタイムスタンプに設定されること)`などがあります。
テーブルを削除する
DROP [TEMPORARY] TABLE [IF EXISTS] <テーブル名>
テーブルの作成をファイルから実行する
テキストファイルにSQL文を保存し、下記のコマンドを実行します。
mysql < text_file
Docker上のMySQLに対して実行する場合は以下のとおりです。text_fileをDocker上に置いてある場合はappコンテナに入る必要があります。
docker-compose exec app /bin/bash # appコンテナ内に入る
mysql -h db -u book_log -D book_log -p < text_file
Discussion