LotosLabo

プログラミング技術とか気になった情報を載せていきます

MySQLについて


MySQLとは

世界で最も普及しているオープンソースリレーショナルデータベース管理システムと言われています。


開発環境

インストールは公式サイトよりできます。

http://www-jp.mysql.com/


ダウンロードタブより、MySQL Community Editionというのをクリックします。

次に、MySQL Community Serverをクリックしてダウンロードします。
それぞれ自分の環境にあったものをインストールしてください。

また、ログインしろと言われるかもしれませんが、No thanks~をクリックしてダウンロードしていきます。



インストーラーの進め方に関してはこちらの
DB Online様のサイトで詳しく説明してありますのでそちらをご参照ください。

http://www.dbonline.jp/mysqlinstall/install/index2.html


MySQLを始める

コマンドプロンプトを使用していきます。

うまくインストールされているか確認しましょう。


mysql --version
でバージョンの確認ができます。

f:id:lo25131:20140329001523j:plain


まずはmysqlを始める前にパスワードを設定する必要があります。
パスワードを設定するには、

mysql -u root

にて設定できます。
一度設定した後は、パスワードを指定しないと起動できなくなります。


パスワードの設定

set password for root@localhost=password("この中に記述")

このように設定していきます。

パスワードを設定したら起動していきます。



パスワードを設定した後は

mysql -u root -p

で起動して、パスワードが求められるので入力していきます。

f:id:lo25131:20140329002057j:plain



終了する方法は

exit 

になります。


基本的なコマンド

データベースを作成

create database データベース名;

例:

create database sampledata;


データベースを確認

show databases;


データベースを削除

drop database データベース名;

例:

drop database sampledata;


データベースの切り替え

use データベース名;

例:

use sampledata;



ユーザーを作成

今まではrootユーザーという一番権限が高いユーザで行ってきましたが、
すべてのデータベースにアクセスすることが出来てしまうので、
データベースを間違っていじってしまう危険性があります。
そのためにユーザーを分けていきます。

ユーザー作成コマンド

grant all on データーベース名.* to 作成するユーザー名@localhost identified by 'パスワード';


例:

grant all on sampledata.* to dbuser@localhost
identified by 'bfdio3';


ここからログインするときには

mysql -u dbuser -p sampledata;

でログイン可能です。


テーブル操作

テーブルの作成

テーブルの内容には、
id
名前
Eメール
パスワード

を入れていきます。

この項目をフィールドと言います。


例:

create table users(
id int,
name varchar(255),
email varchar(255),
password char(32)
);


テーブルの削除

drop table テーブル名;




データ型一覧


<数値型>

int 整数
double 小数


<文字列型>

char 固定長の文字列
varchar 可変長の文字列
text 長さがわからない


<日付型>

date
datetime


<その他>

enum 列挙型


フィールドの設定


入力を必須にさせたい
not null


デフォルト値を設定
default 'male'


=>自動連番
auto_increment


=>索引(インデックス)
そのフィールドで検索した時に動作が早くなる特性がある。
index(フィールド名)


=>主キー
レコードの中で一位に設定できる。しかし、一つしか設定できない。
primary key


=>検索キー
オリジナルのキー名を作成して検索しやすいようにする
key score1(score) key
オリジナルキー名(フィールド名)


=>ユニークキー
テーブルの中で重複しないようにする値
unique




※テーブルの構造を見るときに便利なコマンドとして

desc テーブル名;

というものがあります。

f:id:lo25131:20140329013558j:plain

とても便利なコマンドなので覚えておいたほうがいいです。


レコードの処理

レコードの挿入


insert into テーブル名(フィールド名を入れていく) values(値を入れていく);


例:

insert into users(name,email,password,score,memo,created) values('lotos','lotos.welt@gmail.com','aiueo',10.2,'&memomemomemo','2014-3-29 2:05:00');


レコードの抽出

テーブルのすべての要素を抽出

select * from テーブル名;

例:

select * from uesrs;



指定して抽出

例:

select name,email,from users;



縦に抽出

例:

select * from users \G



f:id:lo25131:20140329021758j:plain


条件付きで抽出

where を使う

例:

select * from users where score >=5.0;
// テーブルusersのスコアが5.0以上


曖昧な検索

例:

select * from users where email like '%gmail.com';
select * from users where email like '%@yahoo.co.__';
// _ は任意の一文字


条件を更に指定

between

二つの値の間

例:スコアが5以上8以下
select * from users where score between 5.0 and 8.0;

in

()の中のどちらか

例:AかBのどちらか
select * from users where team in('red','yellow');

and

両方

例:両方を使う and
select * from users where score >= 4.0 and team = 'blue'

or

どちらか一つが当てはまる

例:どちらか or
select * from users where score >= 4.0 or team = 'blue'


並び替え

order by

小さい順番から並び替える

例:小さい順番
select * from users order by score;


order by フィールド名 desc

大きい順番から並び替える

例:大きい順番
select * from users order by score desc;


また、文字に対して行うとアルファベット順になる

例:文字アルファベット順
select * from users order by name;

limit

数を制限する

例:件数を制限 3件数を表示
select * from users limit 3;


limit 制限数始まり, 制限数終わり

例:任意の数から始まりそれで終わる
select * from users limit 2, 2;


例:組み合わせもできる
select * from users order by score desc limit 3;


データの集計

count(*)

件数を調べる

例:レコードの総件数を調べる
select count(*) from users;

distinct

値を抽出

例:そのフィールドにどのような値が入っているのか
select distinct team from users;

max(フィールド名)

最大値を抽出

例:最大値を取る
select max(score) from users;


min(フィールド名)

最小値を抽出

例:最小値を取る
select min(score) from users;

avg(フィールド名)

平均値を抽出

例:平均値を取る
select avg(score) from users;

sum(フィールド名)

合計値を抽出

例:合計を取る
select sum(score) from users;

group by フィールド名


例:チームでグループ集計
select team,avg(score) from users group by team;

rand()

乱数

例:乱数を出す
select rand();


例:抽選で誰か一人を選ぶ
select * from users order by rand() limit 1;



文字列、日付関数

length(フィールド名)

文字列数を調べる

例:文字列数
select email,length(email) from users;

concat(フィールド名1,'(',フィールド名2,')')

例:文字列の連結
select concat(name,'(',team,')') from users;

now()

例:現在時刻を求める
select now();

month(フィールド名)

月のみを抽出

例:月だけを出力
select name,month(created) from users;

datediff(now(),フィールド名)

現在時刻との差分

例:日付の差分、現在との
select name, datediff(now(), created) from users;


レコードの更新

例:idが5の人のメールアドレスを更新
update users set email = 'dfdjfldfd@gmail.com' where id =5;


レコードの削除

例:scoreが4.0以下の人のレコードすべてを消す
delete from users where score <= 4.0;


テーブルの構造を変更

alter table テーブル名 add

フィールドの追加をします

例:フィールドの追加
alter table users add full_name varchar(255) after name;

// full_nameがnameの下に追加

alter table テーブル名 change

フィールドの変更をします

例:フィールドの変更
alter table users change full_name full_name varchar(100);


alter table テーブル名 drop

フィールドの削除をします

例:フィールドの削除
alter table users drop full_name;

alter table テーブル名 add index

索引(インデックス)を付けます

例:索引を付ける(インデックス)
alter table users add index name (name);

alter table テーブル名 drop index

索引を削除します

例:索引を削除
alter table users drop index name (name);

alter table テーブル名rename

テーブル自体の名前を変更します

例:テーブルの名前自体を変える
alter table users rename blog_users;


外部よりsqlファイルを読み込む


まずは既に存在していないかを確認するために次のコマンドを入力して、すでにある場合は削除を要請します。

drop table if exists 追加するテーブル名;


今回は sample.sql というファイルを作成します。

読み込むときは・・・・

mysql -u dbuser -p データベース名 < 追加するテーブル(sample.sql)

で起動します。