目次

MySQLの使い方

MySQLへリモートログインする方法

mysql -u root -p -h 192.168.1.2

-hオプションでサーバー名やIPアドレスを指定すると
リモートでMySQLにログインできる。

MySQLへユーザーを追加する方法

ローカルユーザーを作成する

CREATE USER aaa@localhost IDENTIFIED BY 'bbb';

aaaという名前のユーザーを作成。
パスワードをbbbに設定。

ホストをlocalhostにすると、ローカルログイン専用のユーザーになる。
(リモートログインはできない)

リモートユーザーを作成する

CREATE USER aaa@'%' IDENTIFIED BY 'bbb';

ホストを%(ワイルドカード)に設定。
%の前後には ' (シングルクォーテーション)をつける。
(つけないとエラーになるので注意)

ホストを%にすると、リモートログインができるユーザーになる。

ユーザーを削除する

DROP USER aaa@localhost;

user@hostを指定してユーザーを削除。

ユーザーの権限を表示する

SHOW GRANTS FOR aaa@localhost;

aaa@localhostの権限を表示する。

CREATE USERしたばかりのユーザーはデフォルトでUSAGEという権限だけを持っている。
USAGEというのは、ログインだけはできるが、何の権限もないユーザー。

権限を追加しないとSELECTCREATE TABLEなどのデータベース操作ができない。

ユーザーの権限を設定する

特定のデータベースに対してALLの権限を設定

GRANT ALL ON xxx.* TO aaa@localhost;

aaa@localhostというユーザーに
xxxというデータベースの*(すべてのテーブル)に対して
ALL(全権限)を与える。

すべてのデータベースに対してALLの権限を設定

GRANT ALL ON *.* TO aaa@localhost;

aaa@localhostというユーザーに
*(全データベース)の*(すべてのテーブル)に対して
ALL(全権限)を与える。

一部の権限だけを許可する設定

GRANT SELECT, INSERT ON *.* TO aaa@localhost;

SELECTINSERTだけ実行できるようになる。

一部のテーブルだけを許可する設定

GRANT ALL ON xxx.yyy TO aaa@localhost;

xxxというデータベースのyyyというテーブルだけ操作できる。

データベースを作成する方法

CREATE DATABASE xxx;

xxxという名前のデータベースを作成。

データベースを選択

USE xxx;

xxxというデータベースを操作対象に設定。

テーブル一覧を表示

SHOW TABLES

選択中のデータベースで、テーブル一覧を表示。

テーブルを作成

CREATE TABLE users (id INT AUTO_INCREMENT, name TEXT, PRIMARY KEY (id))

usersという名前のテーブルを作成。

idnameというカラムを設定。

idをプライマリーキーに設定。

システム変数を表示する

SHOW VARIABLES LIKE "chara%";
実行結果
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb3                    |
| character_set_connection | utf8mb3                    |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb3                    |
| character_set_server     | latin1                     |
| character_set_system     | utf8mb3                    |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.001 sec)

charaで始まるシステム変数の値を表示。

MySQLで使われている文字コードを確認するために使う。

SHOW VARIABLES;だけ実行すれば、全システム変数が表示される。
(全部で600個くらい表示される)

SHOW CREATE TABLE

SHOW CREATE TABLE xxx;

xxxという名前のテーブルを再現するためのcreate tableコマンドを出力する。

開発環境から本番環境へMySQLの構造をコピーするときに使う。
(データはコピーされない)

DESCRIBE

DESCRIBE xxx;

xxxという名前のテーブルの構造を表示。

SELECT

SELECT * FROM xxx;

xxxテーブルのデータを表示。

INSERT

INSERT INTO xxx (name) VALUES ('aaa');

xxxテーブルにレコードを追加。
nameカラムにaaaという文字を設定。

DROP

DROP DATABASE

DROP DATABASE xxx;

xxxという名前のテーブルを削除

DROP TABLE

DROP TABLE xxx;

xxxという名前のテーブルを削除

ALTER TABLE

ALTER TABLE xxx ADD ccc1 INT AFTER ccc2;

xxxというテーブルで、
ccc2というカラムの後ろにccc1というカラムを追加する。

AFTERを指定しなければ、末尾にカラムが追加される。

コンソールからSQLを実行する方法

mysql -u root -e "SELECT * FROM xxx.yyy;" > result.text

-eオプションで、コンソールから直接SQLコマンドを実行できる。

>で出力をファイルに保存している。

USE

データベースを選択する。


SELECT * FROM xxx.yyy;

データベースを選択していない場合、
SELECTなどで、FROM データベース名.テーブル名のような形式でターゲットを指定する。


USE xxx;
SELECT * FROM yyy;

データベースを選択した場合、
SELECTなどで、FROM テーブル名だけでターゲットを指定できる。

mysqlコマンドでデータベースを指定する

mysql -u root -p xxx < dump.sql

mysqlコマンドの末尾にデータベース名(xxx)を書くと、使用するデータベースを指定できる。

ファイルからSQLコマンドを一括で実行するとき、データベースの指定がされていないと
No database selected
のようなエラーが出る。