接続
$ mysql --help # ヘルプを表示する
$ mysql --help | grep my.cnf # 設定ファイルのパスを表示する
$ mysql --version # バージョン情報を表示する
$ mysql -u user -p [database] # データベースに接続する
mysql> exit # データベースとの接続を切る
// 接続情報
mysql> \s
mysql> SHOW VARIABLES LIKE ‘%port%’;
ユーザー管理
mysql> SELECT host, user FROM mysql.user;
mysql> DELETE FROM mysql.user where password='';
mysql> DELETE FROM mysql.user where host='';
mysql> CREATE USER user_name IDENTIFIED BY 'password';
mysql> SET PASSWORD FOR user@host=password('new_password');
データベース操作
mysql> SHOW DATABASES; -- データベースの一覧を表示する
mysql> USE db_name; -- 作業するデータベースを指定する
mysql> CREATE DATABASE db_name; -- データベースを新規作成する
mysql> DROP DATABASE db_name; -- 指定したデータベースを削除する
// 特定のデータベースの作業権限を付与した新規ユーザーを作成する
mysql> grant all on db.table to user@host identified by 'password';
テーブル操作
mysql> CREATE TABLE IF NOT EXISTS table_name (
id int,
group_id int,
name varchar(255), -- varcharは可変長文字列
email varchar(255),
password char(32), -- charは固定長文字列
PRIMARY KEY (id), -- 主キー制約
CONSTRAINT FOREIGN KEY (group_id) REFERENCES ex_table (ex_column) -- 参照整合性制約
);
mysql> SHOW TABLES LIKE '%hoge%'; -- 名前に hoge を含むテーブルを表示する
mysql> SHOW CREATE TABLE table_name; -- テーブルの定義を表示する
mysql> SHOW INDEX FROM table_name; -- テーブルのインデックスを表示する
mysql> DESC table_name; -- テーブルの定義を表示する
mysql> ALTER TABLE table_name -- カラムを追加する
-> ADD COLUMN new_column_name TINYINT UNSIGNED NOT NULL DEFAULT 0 AFTER existing_column_name;
mysql> ALTER TABLE table_name -- カラムを削除する
-> DROP COLUMN existing_column_name;
mysql> ALTER TABLE table_name -- カラムの位置を変更する
-> MODIFY COLUMN target_column_name INT DEFAULT 0 NOT NULL AFTER other_column_name;
mysql> DROP TABLE table_name; -- テーブルを削除する
mysql> TRUNCATE TABLE table_name; -- テーブルのレコードを全て削除する(定義情報は残る)
// 文字コードの変更
mysql> ALTER TABLE table_name charset=characer_code;
mysql> ALTER TABLE table_name convert to character set character_code;
CREATE文で宣言するカラムの制約
制約 | 意味 |
---|---|
NOT NULL | NULLを登録しようとするとエラー |
UNIQUE | ある列の組が一意でない場合はエラー |
CHECK | ある列が取りうる値を指定し、違反した場合はエラー |
レコード操作
mysql> INSERT INTO table_name (column_1, column_2) VALUES (value_1, value_2)
-> ON DUPLICATE KEY UPDATE column_a = value_a; -- レコードを追加する(キーが重複した場合は更新する)
mysql> INSERT INTO table_name (column_1, column_2) VALUES (value_1, value_2)
-> , (value_3, value_4), (value_5, value_6); -- 複数レコードを一括で挿入する(バルク INSERT 文)
mysql> UPDATE table_name SET column_1 = value_1, column_2 = value_2 WHERE column_a = value_a; -- レコードを更新する
mysql> DELETE FROM table_name WHERE column_name = value; -- レコードを削除する
mysql> SELECT * FROM table_name LIMIT 50 OFFSET 5; -- 最初の5件をスキップし、それ以降の50件を取得する
mysql> SELECT * FROM table_name LIMIT 5 \G; -- \G で各カラムを縦に並べて出力する。カラムが多くて見にくい時に。
バックアップ
$ mysqldump -u user -h host database > ./file.sql # 論理バックアップを作成
$ mysql -u user -h host database < ./file.sql # 論理バックアップから復元
参考情報
- ドットインストール/MySQL入門
- もしのまメモ/【MySQL】ユーザー関連初期設定(作成・削除とかとか)【コマンドプロンプト】
- karakaram-blog/MySQLのユーザを管理する方法まとめ。作成・パスワード・権限
- さすけのプログラミング入門/MySQL ユーザの操作(作成、パスワード変更、削除)
- 俺はそんなにやる気ない/MySQLのデータベースとテーブルの文字コードを変更する
- mysqlで文字コードをutf8にセットする
- Softel メモ/【MySQL】テーブルの文字コードを調べる
- Be an Idealistic Realist/MySQLでテーブルとカラムの文字コードを一括変更する