MySQL備考録

Table of Contents

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://support.office.com/ja-jp/article/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E8%A8%AD%E8%A8%88%E3%81%AE%E5%9F%BA%E6%9C%AC-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmnormalization

データ型 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
# #から始まって行末まで(改行不可)
– から始まって行末まで(–の後は半角スペース、改行不可)
/* */ /から/までのコメント(改行可能)