読者です 読者をやめる 読者になる 読者になる

【MySQL】コマンドラインで最初に覚えたほうがいいと思うことまとめ

はじめに

わりとphpMyAdmin等のツールを使ってる人や職場は多いのかなと思います。僕がいた職場でもそういうところけっこう多かったです。

けど現場によってはそんなツールは断固として使わない!ていうことも多いと思います。そんなときはコマンドラインでの操作になれてないと最初少し戸惑うこともあるかと思われます。

とはいえ、所詮SQL実行するだけなので慣れかとは思いますが、僕が普段操作しててこれくらい覚えておけばとりあえず開発で作業するくらいでは困らないかなと思う事をメモしておきます

接続用のシェルを用意する

mysql -uユーザ名 -pパスワード db名

これをコピっておけばそれをはりつければいいだけなんですけど、、、
~/bin以下に適当なスクリプトをおいておけばいつでも起動できます。微々たることではありますが

~/bin/mysql_connect.sh

mysql -uUSER -pPASSWORD DBNAME

みたいな感じで用意しておけば毎回アカウントやパスワードを入力する手間も省けるのでいいんじゃないかなぁと思われます

以下、このファイルを用意した前提とします

最低限のカーソル移動を覚える

bashやらの話になってしまうのかもしれないのですが、Linux環境で利用されることが多いと思われるMySQL
以下のカーソル移動を覚えておくだけでも作業負荷軽減に貢献できるのではないかなぁと思ってます

> Ctrl + a
行頭に移動

> Ctrl + e
行末に移動

> Ctrl + f
1文字前へ移動

> Ctrl + b
1文字後ろへ移動

長いSQLとか編集するとき使えると思われます

履歴表示

> Ctrl + p(またはテンキーの上)
おすごとに1つ前に実行したコマンドが表示されます。便利です

¥G

select * from sample ¥G;

のように文末に「¥G」をつけると、結果が劇的に見やすくなります。

テーブル内容確認

desc テーブル名

mysql> desc sample;
+-------------+----------+------+-----+---------+----------------+
| Field       | Type     | Null | Key | Default | Extra          |
+-------------+----------+------+-----+---------+----------------+
| id          | int(11)  | NO   | PRI | NULL    | auto_increment |
| name     | varchar(64)  | NO   | MUL | NULL    |                |
+-------------+----------+------+-----+---------+----------------+

show index from テーブル名;

mysql> show index from sample;
+----------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table          | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| sample |          0 | PRIMARY    |            1 | id          | A         |       100 |     NULL | NULL   |      | BTREE      |         |               |
+----------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

show create table テーブル名;

mysql> show create table sample\G;
*************************** 1. row ***************************
       Table: sample
Create Table: CREATE TABLE `sample` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8

リダイレクトで実行

input.sql

insert into sample (id, name) values(1, "hoge");

こんな感じでSQLだけ記述したファイルを用意します

で、以下のコマンドを実行すれば簡単にSQLが実行できます(mysql_connectは上で書きましたが自前のコマンドです)

mysql_connect < input.sql

画面にコピペだとファイルが大きいときとかは特にこっちのほうが楽だと思います

リダイレクトでファイル出力

input.sql

select id, name from sample;

こんな感じでSQLのみ記述したファイルを用意して、以下のコマンドを実行すればTSV形式(タブ区切り)のファイルが簡単に作れます。
便利です

mysql_connect < input.sql > output.sql

トランザクションをつけるクセをつける

updateやdelete文でwhere句を間違えたりつけ忘れると大問題です
更新系のSQLを実行するときはトランザクションでくくるクセにするといいと思います

// トランザクション開始
begin;

// 更新系SQL実行

// SELECT文で更新後のデータを確認

// 問題なければコミット
commit;

ページャーを使う

SELECT文を実行してその結果が大量だと結果がどんどん流れて内容を確認するのには不便です。

// 出力先をlessコマンドに
pager less -S;

// 通常に戻したければ
nopager;

ふだんから使ってる人からしたら当たりまえのことばかりだとは思うのですが、自分が普段つかってるのはこれくらいかな。

以上です