周辺知識

MySQLコマンド(早見表)

2018/12/14

普段、MySQLコマンドを触ることがないので、いざ使うときにコマンドを忘れて困ったりします。

そんなときのために、今回は MySQLコマンドの早見表をエントリーします。

その前に。。はじめてWindows のローカル環境で MySQL をコマンドで操作する場合は、はじめに環境変数の PATH の設定が必要です。

あらかじめ、PATH で実行ファイルの場所を指定しておくと、どのディレクトリからも MySQL.exe が実行可能となります。

PATHの設定の仕方ですが、以下のサイトがとてもわかりやすかったです。

初心者のためのMySQL講座~接続編~

 

ログイン


mysql -u { username } -p
mysql -h { xxx.xxx.xxx.xxx } -u { username } -p  # リモートアクセス

チェック -p オプションはパスワード設定しているときのみ。
ログイン後は MySQLコマンドしか使えない。またコマンドは最後に「;」(セミコロン)を入れる。

 

ユーザ操作

ユーザー作成


CREATE USER `user_name`@`host_name` IENTIFIED BY 'password';

チェックシングルクォートとバッククォートの使い分けを理解しておきましょう。
詳細は以下のページをご確認ください。

 

ユーザーにDB操作権限を付与


GRANT ALL PRIVILEGES ON db_name.* to user_name@host_name IDENTIFIED BY 'password';

 

ユーザー削除


DROP USER user_name@host_name;

 

データベース操作

データベース一覧表示


SHOW DATABASES;

 

新規作成


CREATE DATABASE db_name;

 

文字セット

既に作成済みのデータベース名を指定し、属性の変更を行えます。


ALTER DATABASE db_name CHARACTER SET utf8;

 

使用するデータベースを選択


USE db_name

 

データベースの削除


DROP DATABASE db_name;

 

テーブル操作

テーブル一覧を表示


SHOW TABLES;

 

カラム一覧を表示


DESC table_name;

 

テーブルの削除


DROP TABLE table_name;

 

レコードの操作

レコードの追加


USE db_name;
INSERT INTO tbl_name (col_name1,col_name2,...) VALUES (value1, value2,...);

 
全てのカラムに値を指定する場合に限ってカラムの記述を省略することができます。


USE db_name;
INSERT INTO tbl_name VALUES (value1, value2,...);

 

レコードの更新


USE db_name;
UPDATE tbl_name SET col_name1=expr1 [, col_name2=expr2 ...];

 
どのデータを更新するのかをWHERE句を使って指定します。


# id が 10 のレコードの price カラムの値を 1000 に設定する
UPDATE uriage SET price = 1000 WHERE id = 10;

 

指定のテーブルに含まれるデータを削除

idカラムの値が10のデータを削除する


DELETE FROM uriage WHERE id = 10;

 

制約

ユニーク

カラムの値を重複させない(一意性)制約です。


CREATE TABLE テーブル名( id INT UNIQUE, name VARCHAR(10));

 

NOT NULL

カラムに格納する値として NULL を禁止したい場合に使用します。


ALTER TABLE テーブル名(カラム名 NOT NULL, ...);

 

PRIMARY KEY(主キー)

PRIMARY KEY 制約は主キー制約とも呼ばれ、レコードの識別に利用されるカラムに指定する制約です。
UNIQUE制約NOT NULL制約を合わせた制約です。


CREATE TABLE テーブル名(カラム名 PRIMARY KEY, ...);

 

FOREIGN KEY(外部キー)

FOREIGN KEY制約は外部キー制約とも呼ばれています。関連したテーブル間を結ぶために設定する列のことです。
データの整合性をデータベースに保証させるために利用します。

 
親テーブル(参照される側のテーブル)


CREATE TABLE 親テーブル名(親カラム名 データ型) ENGINE=InnoDB;

 
子テーブル(参照する側のテーブル)


CREATE TABLE 子テーブル名(子カラム名 データ型,
  FOREIGN KEY(子カラム名)
  REFERENCES 親テーブル名(親カラム名)
) ENGINE=InnoDB;

 

インデックス

 
Indexを作成するべき列の特長
1)テーブル内のデータ量が多く、少量のレコードを検索する場合
2)WHERE句の条件、結合の条件、ORDER BY 句の条件として頻繁に利用する場合
3)NULL値が多いデータから、NULL値以外の検索をする場合


ALTER TABLE テーブル名 ADD INDEX インデックス名(カラム名);
-- 書式例
ALTER TABLE db_01.USER_DATA ADD INDEX index01(user_id);

 

検索

LIKE検索+複数


SELECT * FROM テーブル名 Where カラム名 like ('%特定の値%') OR カラム名 like ('%特定の値%');

 

特定の値

MySQLでデータを抽出するときに、特定のデータを抽出する


// 単数
SELECT * FROM テーブル名 WHERE カラム名 IN("特定の値");
// 複数の場合
SELECT * FROM テーブル名 IN カラム名("特定の値","特定の値","特定の値");

 

特定の値以外

MySQLでデータを抽出するときに、特定の値以外のデータを抽出する


SELECT * FROM テーブル名 WHERE カラム名 NOT IN("特定の値");

 

結合

内部結合


SELECT * FROM テーブル名1
INNER JOIN テーブル名2
 ON テーブル名1.カラム名1 = テーブル名2.カラム名2;

 

内部結合 + 条件


SELECT * From テーブル名1 
INNER JOIN テーブル名2
 ON テーブル名1.カラム名1 = テーブル名2.カラム名2
WHERE テーブル.カラム > 3000; -- ※ WHERE句のあとは抽出条件

 

3つのテーブル結合


SELECT テーブル名.カラム名, ... -- ※ 取得したいカラム名
FROM テーブル名1 
INNER JOIN テーブル名2
 ON テーブル名1.カラム名1 = テーブル名2.カラム名2 
INNER JOIN テーブル名3
 ON テーブル名1.カラム名1 = テーブル名3.カラム名3 

 

ダンプ&リストア

ダンプ


mysqldump -u { user_name } -p { db_name } > { dumpfile.sql }

 

リストア


mysql -u { user_name } -p { db_name } < dumpfile.sql

チェックはじめてリストアする場合は、あらかじめリストアさせるDBを作成してください。 CREATE DATABASE db_name;

 
何か気づいたら、随時追加予定です。

本庄マサノリ

仕事でLaravelを使っています。気づいたことや新しい発見など情報を発信していきます。メールはこちら

 

-周辺知識