初めてのSQL
インストールがマジで面倒
なぜかWSL2のUbuntuにaptで入れても動かないので仕方なくDockerでやる
docker run --name mysql -e MYSQL_ROOT_PASSWORD=pass -d -p 3306:3306 mysql
docker exec -it 3ff4205c bash
関係データベース
テーブルが複数ある
カラム
idとか名前とか
行
顧客A、B、C…
主キー / primary key
顧客Aのデータはid: 1で一意に発見できる、みたいな
外部キー (foreign key)
ツイートのテーブルに投稿者のIDのカラムがある、みたいな
投稿者のidを使ってユーザーのテーブルの該当する行を探す
結合 / join
ツイートのテーブルに投稿者の名前のカラムを置くべきか?
A. 置くべきでない
不必要に冗長だから
投稿したユーザーの名前が変わったときにはuserテーブルの対応するカラムだけ変えれば良い状態にする
正規化
SQL文には分類がある
SQL schema statement
データ構造の定義
create でテーブルを作成するなど
SQL data statement
データ構造の操作
insert で列を追加するなど
SQL transaction statement
トランザクション (とは?)
可変長文字列はvarchar型 (65535Bまで入る)
もっと長いやつはMySQLでは mediumtext (16MB) longtext (4GB)
timestamp 型の列は更新・挿入時に自動的にその時の時刻が挿入される
MySQLには enum("R", "G","B") のようなenumがある
外部キー制約 foreign-key constraint
constraint fk_user foreign key (author) references user (user_id)
userに存在しない user_id を author に設定できなくなる
alter table <table> modify <column> <type>