予約語と識別子 ・MySQLのテーブル名やカラム名などの「識別子」には、基本的に「予約語」が使えない ・識別子に予約語と同じ単語を使う場合はバッククォート(`)で括る必要がある ・トラブルの原因になるので、アンチパターンです > SELECT id, `order`, created_at, updated_at FROM items ORDER BY `order`;
> ALTER TABLE users ADD COLUMN age INTEGER AFTER name; テーブル構造を変更する ・usersテーブルのnameの次にageというカラムを追加する ・追加(ADD)、変更(CHANGE)、削除(DROP)などがある https://www.dbonline.jp/mysql/table/index18.html 実践
比較演算子 演算子 使用例 意味 = a = b a と b は等しい != a != b a と b は等しくない < a < b a は b よりも小さい <= a <= b a は b よりも小さいか等しい > a > b a は b よりも大きい >= a >= b a は b よりも大きいか等しい IS NULL a IS NULL a はNULL IS NOT NULL a IS NOT NULL a はNULLではない BETWEEN AND a BETWEEN min AND max a は minより大きいか等しくmaxより小さいか等しい LIKE a LIKE pattern SQL の単純な正規表現比較を使用したパターンマッチング https://dev.mysql.com/doc/refman/8.0/en/sql-function-reference.html
論理演算子 演算子 使用例 意味 AND a AND b a と b が共にTRUEの時にTRUE OR a OR b a か b の少なくとも1つがTRUEの場合にTRUE XOR a XOR b a と b が共にTRUEまたはFALSEの時にFALSE a または b がNULLのときはNULL NOT NOT a a がTRUEならFALSE、a がFALSEならTRUE https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html > SELECT * FROM users WHERE (age > 20) AND (name = ‘Suzuki’);
・usersのデータをageの降順で取得して表示する ・ASC:昇順(デフォルト) ・DESC:降順 ・カンマ区切りで複数指定することも可能 https://www.dbonline.jp/mysql/select/index11.html ※文字列をソートする場合は注意が必要 参考:https://style.potepan.com/articles/26546.html 取得するデータをソートする > SELECT * FROM users ORDER BY age DESC;
グループ化 ・ageが同じ値のデータをグループ化し、ageごとの個数をカウントする ・COUNT関数で個数がカウントされる https://www.dbonline.jp/mysql/select/index9.html > SELECT age, COUNT(age) FROM users GROUP BY age;
別名をつける(AS) ・カラム名やテーブル名などにASを使って別名をつけることができる > SELECT usr.id AS user_id, atl.id AS article_id, usr.name, atl.article FROM users AS usr INNER JOIN artictles AS atl ON usr.id = atl.user_id;
ユーザ権限設定 ・test_userに全てのデータベースのアクセス権限を追加し、他のユーザの権限も変更できるように設定 ・許可する権限タイプにALL PRIVILEGES(全ての権限)を指定している ・権限タイプはSELECT、CREATEなどコマンドレベルで指定できる ・*.*の部分が全てのデータベースを指定 ・権限はデータベース、テーブル、カラム単位などで設定可能 ・WITH GRANT OPTIONで他のユーザの権限設定もできるようになる https://www.dbonline.jp/mysql/user/index6.html > GRANT ALL PRIVILEGES ON *.* TO 'test_user'@'localhost' WITH GRANT OPTION;
権限の削除 ・test_user@localhostの全ての権限が削除される ・ALLのところを別の権限タイプを指定することで、指定に応じた権限のみを削除できる https://www.dbonline.jp/mysql/user/index8.html > REVOKE ALL, GRANT OPTION FROM test_user@localhost;
REPEATABLE READ A> use training; // Aでトランザクション開始 A> BEGIN; B> use training; // Bでトランザクション開始 B> BEGIN; A> SELECT * FROM subjects WHERE id = 1; +----+--------+ | id | name | +----+--------+ | 1 | 国語 | +----+--------+ 1 row in set (0.02 sec) A> UPDATE subjects SET name = '更新' WHERE id = 1; A> SELECT * FROM subjects WHERE id = 1; +----+--------+ | id | name | +----+--------+ | 1 | 更新 | +----+--------+ 1 row in set (0.02 sec) // Bではコミット前の変更が見えない( ダーティーリードが起きない ) B> SELECT * FROM subjects WHERE id = 1; +----+--------+ | id | name | +----+--------+ | 1 | 国語 | +----+--------+ 1 row in set (0.01 sec) A> commit; // Bではコミット後の変更が見えない( ファジーリードが起きない ) B> SELECT * FROM subjects WHERE id = 1; +----+--------+ | id | name | +----+--------+ | 1 | 国語 | +----+--------+ 1 row in set (0.01 sec) A> INSERT INTO subjects (name) VALUES ('新しい科目 '); A> commit; // Bではコミット後の追加処理が見えない( ファントムリードが起きない ) B> SELECT * FROM subjects; ...