MySQL入門

レッスン終了。以下メモ

フィールド フィールド フィールド フィールド
レコード
レコード
レコード
レコード

この表1つがテーブル
その表をまとめて保存しているものがデータベース

MySQLの操作
コマンド 内容
mysql
  -u ユーザー名 ユーザー名でログインする
  -p パスワードを使ってログインする
set password for username@localhost=passwrod(''); パスワードをセットする。
mysql -u username -p dbname < 外部ファイル 外部ファイルのコマンド実行
mysqldump バックアップ、復元のためのコマンド
不当記号で分ける
バックアップ
mysqldump -u username -p dbname > 保存先ファイル名
復元
mysqldump -u username -p dbname < バックアップファイル名

ここまでlinux上でのコマンド

MySQLログイン後のコマンド
grant all on tablename to username@localhost identified by 'password'; ユーザーにデータベースの操作の権限をパスワード付きで与える。rootログイン時のみ可
exit MySQLからログアウトする
quit, \q でもログアウト可能
データベースの操作
create 作成
show 一覧を表示。
ここだけdatabases, tablesなど複数形になる
drop 削除
use dbname データベース切り替え
if exists もし既に存在していた時の為のコマンド
drop table if exists tablename;
create table tablename();
みたいな形で使う
like 構造のコピー
create table newtable like oldtable;
oldtableと同じ構造のテーブルをnewtableという名前で作る
desc 構造の表示
select * from tablename レコードを表示
select * from tablename \G
レコードを縦に表示
where 条件指定
insert into tablename (field,..,..)
values (value,..,..);
レコードに値を挿入
update tablename set field1=value1, field2=value2,.. レコードの値を更新
delete from tablename レコードの削除
like % 任意の文字列
_ 任意の一文字
条件指定で抽出できる
between 指定した範囲内のレコードを取得
select * from tablename where fieldname between value1 and value2;
in 条件意当てはまるレコードを取得
select * from tablename where fieldname in ('value1', 'value2');
order by asc 昇順
desc 降順
ソートして表示
group by グループを昇順にソートして表示
group by fieldname order by null
ソートが発生しない
limit limit offset,max
開始行位置指定と件数最大値指定
limit 2, 2なら3行目から2行表示
select*fromでは必ずしもidの昇順に取得するとは限らない。limitを使う場合などはorder byを使うのがよろし
alter table 構造の変更
add フィールドの追加
キーの追加
alter table tablename add key fieldname(fieldname);
after フィールドの位置の指定
change フィールドの設定変更
drop フィールドの削除
キーの削除
alter table tablename drop key fieldname;
rename テーブル名の変更

複数のテーブルをまたぐ場合 table.field とテーブルとフィールドを.つなぎにする。


MySQLの型、設定
数値
int 整数(integer)
double 浮動少数
おそらくfloatあたりも使えると思う
文字列
char 文字列
型の大きさが決まっているときなどに
varchar 文字列
型の大きさが不明瞭なときなどに
text 文字列
大量の文字列のときなどに。ただし使いすぎると重くなる
日付
date 日付を表示
datetime 日時を表示
それ以外
enum 選択肢形式
すでに値を格納しておく
フィールドの設定
not null 入力必須
default デフォルトの値を設定
auto_increment 自動連番
索引(インデックス) そのフィールドで検索するときに動作が速くなる。
反面、挿入では動作が重くなる
主キー primarykey
テーブルの中で1つしか設定できない
キー 何個でも設定できる。
key field (filed)
ユニークキー unique
重複した値の時に、はじく
MySQL関数関連
count(*) レコード総件数を調べる
select count(*) from tablename;
distinct レコードにどのような値が入っているかを調べる
select distinct fieldname from tablename;
max(fieldname) フィールドの最大値を調べる
select max(fieldname) from tablename;
min(fieldname) フィールドの最小値を調べる
select min(fieldname) from tablename;
avg(fieldname) フィールドの平均値を調べる
select avg(fieldname) from tablename;
sum(fieldname) フィールドの合計値を調べる
select sum(fieldname) from tablename;
rand() 乱数
0<値<1の値をランダムで表示
select * from tablename order by rand() limit 1;
length() 文字列の長さを取得
select length(fieldname) from tablename;
concat() 文字列の連結
select concat(fieldname1, '(', fieldname2, ')') from tablename;
この記述だとfieldname1(fieldname2)と表示される
as フィールドの表示名の変更
select concat(fieldname1, '(', fieldname2, ')') as label from tablename;
この記述ならconcat(fieldname1, '(', fieldname2, ')')と表示されてたところがlabelに
substring 部分文字列の取得
select substring(fieldname,1,1) from tablename;
フィールドネーム1の1文字を取得
now() 現在時刻の取得
select now();
manth() 月だけを表示
select manth(fieldname) from tablename;
datediff() 日付の差分を表示
select datediff(now(), fieldname1) from tablename;
現在時刻からfieldname1の時刻を引いた日数を表示