SQLについて学んだことをまとめていきます。
MySQL起動
- バージョン確認
$ mysql --version
- 起動
$ net start mysql80
- MySQLログイン
以下のどれかでログインする
$ mysql --user=root --password
$ mysql -u user_name -p
(例)mysql -u root -p
$ mysql -u test_user -h 127.0.0.1 -p
※ -hはホスト名を指定するオプション。localhostの時は省略可)
- ログアウト
exit
- 停止
$ net stop mysql80
DDL
(Data Definition Language | データ定義言語)
テーブルを作成・更新・削除したり、テーブルごとのルールや制約を決めたりすることのできる言語
DDL には以下のような種類が存在する。
- CREATE : 新しいテーブルやビューなどのデータベースオブジェクトを作成する
- DROP : 既存のデータベースオブジェクトを削除する
- ALTER : 既存のテーブルベースオブジェクトを変更する
- TRUNCATE : テーブルを再作成する(テーブル内のデータを全削除する)
ユーザー
ユーザー一覧を見る
SELECT user, host FROM mysql.user;
ユーザー作成
CREATE USER user_name@host_name IDENTIFIED BY 'password';
(例)CREATE USER test_user@localhost IDENTIFIED BY 'password';
パスワード変更
SET PASSWORD FOR user_name@host_name = 'new_password';
ユーザー名、ホスト名変更
RENAME USER 'user_name'@'host_name' TO 'new_user_name'@'new_host_name';
ユーザー削除
DROP USER user_name@host_name;
データベース
データベース作成
CREATE DATABASE db_name;
データベース一覧照会
SHOW DATABASES;
データベース選択
(操作するデータベースを選択する。)
USE db_name;
データベース削除
DROP DATABASE db_name;
テーブル
データ型 | 説明 |
---|---|
INT | 4 バイトの数値 |
BIGINT | 8 バイトの数値 |
FROAT | 浮動小数点ありの数値 |
DATE | 日付 |
DATETIME | 日時 |
CHAR(n) | 固定長文字列(足りない分は空白で埋められる) |
VARCHAR(n) | 変長文字列 |
TEXT | 変長文字列 |
※
TEXT型:65535文字まで格納できる。データは別領域に格納され、ポインタでアクセスするため、CRUDの効率はVARCHARに劣る。
VARCHAR型:格納できるデータ量は小さい。データを直接格納するため、CRUDの効率が良い。
テーブルを作成
カラムの型をそれぞれ指定する
CREATE TABLE db_name.table_name (column_name data_type, column_name data_type, ...);
USE で、使用するデータベースを選択している場合、db_name は不要
CREATE TABLE table_name (column_name data_type, column_name data_type, ...);
(例)CREATE TABLE departments (id INT, name VARCHAR(255), start_date DATE);
テーブルのスキーマを表示
SHOW CREATE TABLE table_name;
テーブル一覧を見る
SHOW TABLES;
カラム
テーブルのカラムを確認
SHOW COLUMNS FROM table_name;
インデックス
特定のカラム値のある行をすばやく見つけるために使用される。
インデックスがないと、MySQL は該当する行を見つけるために、先頭行から始めてテーブル全体を走査する必要がある。
特定のカラムにインデックスが設定されており、そのカラムでレコードを走査する場合、 B ツリーと呼ばれるデータ走査に強い木構造を用いることで、データの特定を素早く実行できる。
インデックスの設定
どちらでも可
ALTER TABLE table_name ADD INDEX index_name (column_name);
CREATE INDEX index_name ON table_name(column_name);
(例)departments テーブルの id カラムにインデックスを追加
ALTER TABLE departments ADD INDEX id_index (id);
テーブルのインデックス情報を見る
SHOW INDEX FROM table_name;
(例)
SHOW INDEX FROM departments;