MySQLチートシート


実行環境

  • macOS(bash)
  • MAMP
  • VS Codeでターミナル操作

MYSQLへのアクセスの仕方

MAMPを使っている場合は、きちんとMAMPでローカルサーバやデータベースを動かしている状態で、作業ディレクトリへ移動

$ cd /Applications/MAMP/Library/bin/

mysqlコマンドでログインする

$ ./mysql -u root -proot

MAMPのMySQLはデフォのパスワードがrootなので上記でログインできる。

パスワードまで一気に入れないコマンドは以下。入力するとパスワードを聞いてくれる。

$ ./mysql -u root -p

mysql>が表示されたら、ログイン成功。
QUITと入力して抜ける

今あるデータベースを見てみる

ログインしていて、mysql>が表示された状態でSHOW DATABASE

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| info_schema        |
| pre_schema         |
| wordpress          |
+--------------------+
3 rows in set (0.00 sec)

次に使いたいデータベースをUSEコマンドで選択して中身を見ることができる。

mysql>USE データベース名
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

新しいデータベースを作成する

MySQLにログインした状態で、CREATE文でデータベースを作成

mysql>CREATE DATABASE データベース名;

使うデータベースを選択

mysql>USE データベース名;

新しいユーザの追加

MySQLにログインした状態で、以下のGRANTコマンド入力

mysql>GRANT ALL ON データベース名.* TO user@localhost IDENTIFIED BY 'pass';

GRANT文で、CREATE USER 'ユーザ名'@'接続元ホスト名' IDENTIFIED BY 'パスワード';を入れてユーザを作る。

  • ALLはユーザーに権限を付与する、
  • ON データベース名でどのデータベースに権限付与をするかを示す
  • TO user@localhostで、localhostという接続ホストでuserさんに権限を付与
  • IDENTIFIED BY 'pass'でパスワードをpassに設定

上記コマンドだけでは権限が反映されないので、反映させるコマンド

mysql>FLUSH PRIVILEGES;

使用するデータベースを選択してログインする方法

./mysql -D データベース名 -u ユーザ名 -pパスワード

ユーザ一覧取得

mysql>SELECT User, Host FROM mysql.user;

ユーザ削除

mysql>DROP USER ユーザ@接続元ホスト;

MySQLにテーブルを作成する

MySQLにログインした状態で、以下のGRANTコマンド入力

mysql>CREATE TABLE テーブル名(
  id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
  title VARCHAR(255) NOT NULL,
  body TEXT NOT NULL,
  category_id INT DEFAULT NULL,
  created_at DATETIME NOT NULL,
  updated_at DATETIME NOT NULL
) DEFAULT CHARACTER SET=utf8mb4;

CREATE TABLE + テーブル名を入力して、

()の中に,カラム名 カラムの型 オプションの形で書いていく。

例えば1行目id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,だと

  • id はカラム名
  • INTはデータ型が整数型という意味
  • PRIMARY KEYは主キーを示すオプション。これが一番上ってこと。
  • NOT NULL でこのカラムが空はダメということ。
  • AUTO_INCREMENTは、レコードを挿入するときに、自動的に番号を付与してくれる

閉じカッコのあとのDEFAULT CHARACTER SETは、このテーブルで使う標準の文字セットの設定。utf8mb4は、スマホから入力する絵文字などにも対応した文字セット。

titleカラムのVARCHAR(255)は文字数が255文字まで、という指定

bodyカラムのTEXTは長くなりそうな文章に使う。

created_atはレコードの作成日、updated_atはレコードの編集日で、DATETIMEという日付指定型のデータ型を割り当てる。

できたら、きちんとできているかデータ構造を表示させる

mysql>DESC テーブル名;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| title       | varchar(255) | NO   |     | NULL    |                |
| body        | text         | NO   |     | NULL    |                |
| category_id | int(11)      | YES  |     | NULL    |                |
| created_at  | datetime     | NO   |     | NULL    |                |
| updated_at  | datetime     | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

レコード挿入

USE データベース名などで使用データベースを指定した状態で、以下のINSERTコマンドで挿入できる。

INSERT INTO テーブル名 VALUES(null, "名前", "パスワードの文字列");

一番最初はidだったとしたら、idはNOT NULLにして置くものなので、ここではあえてnullにすると、自動で割り振られる。
このように、使うテーブル名を指定し、挿入したい値をカンマ区切りで入れていくだけ。