OS: Fedora 25
参考にしたもの
コマンド
https://jinzaiipedia.ipa.go.jp/wp-content/uploads/oss/subject1-1_lesson.pdf
http://webkaru.net/mysql/mysql-root-password/
http://mysqlweb.net/
http://qiita.com/tamuuu/items/c65ae417877ae01b132c
http://qiita.com/ques0942/items/d89de1ff7c92b4810d10
http://d.hatena.ne.jp/yk5656/20141204/1426176800
データ型
https://www.dbonline.jp/mysql/type/
http://mysql.akarukutanoshiku.com/category5/entry21.html
リファレンス(ver.5.6)
https://dev.mysql.com/doc/refman/5.6/ja/
#サービスの構築
インストール
sudo yum install mysql mysql-server -y
デーモンの起動
systemctl start mysqld
このrootユーザーは、システムのrootユーザーとは別
sudo mysql -u root -p
[sudo] password for <ユーザ名>:
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.17 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> quit
Bye
MySQLサーバは3306番ポートを利用します。
3306番ポートが開かれているか確認
ログイン
sudo mysql -u root -p
#DBの操作
##DBの表示
SHOW DATABASES;
DBの作成
CREATE DATABASE <DB-name> CHARACTER SET <char-code>;
##使用するDBの選択
USE <DB-name>;
#文字コード
##文字コード表示
show variables like 'character%';
##文字コードの変換
設定ファイルを編集
vim /etc/my.cnf
...
[mysqld]
...
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
デーモンを再起動
# systemctl restart mysqld
#テーブルの操作
##テーブルの表示
SHOW TABLES;
##テーブルの作成
CREATE TABLE <table-name> (
ID AUTO_INCREMENT,
<field-name1> <table-type(<number-of-char>),
<field-name2> <table-type(<number-of-char>),
... ,
#作成日時
CREATED_DATETIME timestamp not null default current_timestamp,
#更新日時
UPDATE_DATETIME timestamp not null default current_timestamp on update current_timestamp,
#主キー
PRIMARY KEY (<field-name1>),
INDEX(<field-name1>)
) character set utf8mb4;
#カラムの操作
##テーブルのカラムを表示
SHOW COLUMNS FROM <table-name>;
##テーブルの各カラムの情報を表示
DESCRIBE <table-name>;
title | description |
---|---|
Field | フィールド名 |
Type | データ型 |
Null | Nullを許可するかどうか |
Key | 主キー |
Default | 初期値 |
Extra | オートインクリメントなど |
#フィールドの操作
##新しいフィールドを追加
ALTER TABLE <table-name> ADD <new-field-name> <table-type(<number-of-char>);
##データ型
###整数型
type | range |
---|---|
TINYINT | -128から127 (符号無しの場合0から255) |
SMALLINT | -32768から32767 (符号無しの場合0から65535) |
MEDIUMINT | -8388608から8388607 (符号無しの場合0から16777215) |
INT | -2147483648から2147483647 (符号無しの場合0から4294967295) |
BIGINT | -9223372036854775808から9223372036854775807 (符号無しの場合0から18446744073709551615) |
###浮動小数点数型
type | range |
---|---|
FLOAT | -3.402823466E+38 から -1.175494351E-38 |
DOUBLE | -1.7976931348623157E+308 から -2.2250738585072014E-308 |
###日付型と時刻型
type | format | range |
---|---|---|
DATE | 'YYYY-MM-DD' | '1000-01-01' から '9999-12-31' |
DATETIME | 'YYYY-MM-DD HH:MM:SS' | '1000-01-01 00:00:00' から '9999-12-31 23:59:59' |
TIMESTAMP | 'YYYY-MM-DD HH:MM:SS' | '1970-01-01 00:00:01' から '2037-12-31 23:59:59' |
TIME | 'HH:MM:SS' | '-838:59:59' から '838:59:59' |
YEAR[(2or4)] | YYYY | 1901 から 2155、そして 0000 (4桁の場合). 70 から 69 (2桁の場合、70は1970を表し69は2069を表す). デフォルトは4桁 |
CHAR型とVARCHAR型
CHAR(M)
固定長文字列
Mは文字数を指定。0から255文字
別名:CHAR(M)はCHARACTER(M)の別名
VARCHAR(M)
可変長文字列
Mはカラムの最大長を文字数で表します。Mの範囲は 0 から 65,535。
別名:VARCHAR(M)はCHARACTER VARYING(M)の別名
###BINARY型とVARBINARY型
BINARY[(N)]
固定長バイナリバイト文字列
Nはバイトを指定。0から255文字
別名:CHAR BYTE
VARBINARY(M)
可変長バイナリバイト文字列
Mはバイト数を指定。0から65535バイト
###BLOB型とTEXT型
BLOB型はバイナリデータを扱うデータ型で格納できるデータのサイズを指定しない。
ただ最大長は決まっており、最大長の種類によって次の4つが用意されている。
TINYBLOB
最長255 (28 - 1) バイト
BLOB[(M)]
最長65,535 (216 - 1) バイト
MEDIUMBLOB
最長16,777,215 (224 - 1) バイト
LONGBLOB
最長4,294,967,295、または4GB (232 - 1) バイト
TEXT型は文字列データを扱うデータ型で格納できるデータのサイズを指定しない。
ただ最大長は決まっており、最大長の種類によって次の4つが用意されている。
TINYTEXT
最長255 (28 - 1) バイト
TEXT[(M)]
最長65,535 (216 - 1) バイト
MEDIUMTEXT
最長16,777,215 (224 - 1) バイト
別名:LONG, LONG VARCHAR
LONGTEXT
最長4,294,967,295、または4GB (232 - 1) バイト
- BLOG型及びTEXT型はそれぞれ巨大なバイナリデータとテキストデータを格納する時に利用される。
- BLOB型はVARBINARY型で格納できるバイト数を指定しなかったものと考えてよい。
データはバイナリデータとしてそのまま格納される。 - TEXT型はVARCHAR型で格納できるバイト数を指定しなかったものと考えてよい。
データは文字列データとして格納される。
###ENUM型
ENUM('value1','value2',...)
単一選択リスト
ENUM型では文字列定数をリストします。このデータ型が設定されたカラムに値を格納する場合、このリストの中の文字列定数の一つを指定します。(例外はあります)。またリストできる値は65,535までです。
###SET型
SET('value1','value2',...)
複数選択リスト
SET型では文字列定数をリストします。このデータ型が設定されたカラムに値を格納する場合、このリストの中の0個以上の定数を指定します。(2個以上指定する場合はカンマで区切ります)。またリストできる値は64までです。
#ユーザの操作
ユーザの追加
CREATE USER <user-name>@localhost IDENTIFIED BY "<password>";
MEDIUM ポリシーは、パスワードが最低 1 つの数値文字を含み、1 つの小文字および大文字を含み、1 つの特殊文字 (英数字以外) を含む必要があるという条件を追加します。
ユーザの参照
SELECT user FROM mysql.user;
#権限の操作
権限の付与
GRANT ALL ON <DB-name>.* TO <user-name>@localhost;
ユーザの権限を参照
SHOW GRANTS FOR <user-name>@localhost;
#レコードの操作
##INSERT
フィールドの指定
INSERT INTO <table-name> (<field-name1>, <field-name2>) VALUES(value1,value2);
フィールドを省略して順番で指定
INSERT INTO <table-name> VALUES(value1, value2);
次は一度に複数レコードを追加
INSERT INTO T01Prefecture (<field-name1>, <field-name2>)
VALUES(value1, value2),(value1, value2),(value1, value2);
更新(UPDATE)とよく似た書き方
フィールド名と値の対応が明確
INSERT INTO <table-name> SET <field-name1> = <value1>, <field-name2> = <value2>;
##SELECT
SELECT * FROM <table-name>;
結合
内部結合 INNER JOIN
左右のテーブルの指定したフィールドが一致するレコードのみ取得する
外部結合 OUTER JOIN
左右のテーブルの指定したフィールドが一致するレコードとどちらからにだけ値が存在するレコードを取得する
LEFT (OUTER) JOIN
左側のレコードはすべて表示する。右側のレコードは値が一致したレコードだけ表示する。
SELECT * FROM <table-name1> OUTER JOIN <table-name2> ON <table-name1>.<column-name>=<table-name2>.<column-name>
LEFT (OUTER) JOIN
右側のレコードはすべて表示する。左側のレコードは値が一致したレコードだけ表示する。
##DELETE
レコード全件削除
DELETE FROM <table-name>;
##UPDATE
UPDATE <table-name> SET <field-name1> = <value1> WHERE <field-name2> = <value>;
#CSVからレコード取り込み
文字コード要確認
LOAD DATA LOCAL INFILE '<file-path>'
INTO TABLE <table-name>
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
(column1, column2);
#外部ファイルからコマンド読み込み
source example.sql
#コメント
コード | description |
---|---|
# | #から始まって行末まで(改行不可) |
-- | -- から始まって行末まで(--の後は半角スペース、改行不可) |
/* */ | /から/までのコメント(改行可能) |