ガードブロッキング的ブログ
mysqlのメモ7
データのバックアップと復元
dump
バックアップする。
mysqldump -u dbuser001 -p blog_app > blog_app.dump.sql
復元は普通にsqlを読み込む(dump)の方
mysql -u dbuser001 -p blog_app < blog_app.dump.sql
複数のテーブルを準備する
さっきのblog_app.sqlのテーブルに追記
drop table if exists posts; create table posts( id int not null primary key auto_increment, user_id int not null, title varchar(255), body text, created datetime, modified datetime );
insert into posts(id,user_id,title,body,created,modified) value (null,1,'こんにちは!','今日からブログはじめました!よろしくです!','2011-05-01 10:55:00','2011-05-05 18:02:00'); insert into posts(id,user_id,title,body,created,modified) value (null,1,'ランチ','食べ過ぎちゃいましたよー','2011-05-04 10:02:00','2011-05-12 10:01:00'); insert into posts(id,user_id,title,body,created,modified) value (null,2,'ブログ','みんなもやっているからやってみる!','2011-03-01 10:05:00','2011-03-02 10:03:00'); insert into posts(id,user_id,title,body,created,modified) value (null,2,'Google','なんかプラスっやつがあるの?','2011-03-02 10:00:00','2011-04-02 10:08:00'); insert into posts(id,user_id,title,body,created,modified) value (null,3,'さてはて','どこから始めるべきですかね?','2011-04-21 15:00:00','2011-04-22 17:00:00'); insert into posts(id,user_id,title,body,created,modified) value (null,3,'今日は!','大変でしたよ。いろいろ。','2011-05-02 14:00:00','2011-05-10 15:00:00'); insert into posts(id,user_id,title,body,created,modified) value (null,3,'夜!','さーて、呑みにいくぜー。','2011-05-22 13:00:00','2011-05-22 13:00:00');
でusers(前回作成)とposts(今回作成)の二つのテーブルが読み込まれた。
複数のテーブルからselectする
select users.name, posts.title from users,posts where users.id = 1 and users.id = posts.user_id;
内訳
users.name, posts.title from users,post
usersテーブルのnameとpostsテーブルのtitleをusersとpostsテーブルから選べ
where users.id = 1 and users.id = posts.user_id
条件
usersのidが1でusersのidとpostsのuser_idが同じ
ということ。
条件を指定しないと無駄なレコードが表示されまくる。
条件を組み合わせてselectする
select posts.title,users.name,posts.created from posts,users where users.id = posts.user_id order by posts.created desc;
表示したいもの
title,name,created
条件
idとuser_idが同じものを降順に。
group by
select users.name,count(posts.id) from users,posts where users.id = posts.user_id group by users.id;
表示したいもの
nameとposts.idの数え
count(posts.id)はposts.idをcountした数字
条件
idとuser_idが同じものをidごとにまとめたもの。
この場合idとnameは対になっているのでnameでも同様の結果になる。
ドットインストール終わり
mysqlの文はphpmyadmin等でも使えるので是非覚えておきたい。
注意事項
- 自分用の覚書です。
- 自分が後から読んで理解できる程度にはしょったりまとめたりしています。
- 後で誤りに気付いた時は随時訂正しています。
- 「ドットインストール」で勉強したのでそれらをなぞっています。
mysqlのメモ6
外部ファイルにSQLを記述する
vi blog_app.sql
viでファイル編集。
ファイル名と拡張子を指定する。
less blog_app.sql
lessでテキストファイル内容を表示(のみ)。
ファイル編集時の基本的な操作一覧
i 挿入モード
Esc 挿入モードを解除してコマンドモードに
:wq ファイルに保存して終了
:w 保存だけ
:q! 保存を破棄して終了
:e! 編集内容を破棄し直前に保存した状態に戻す
コマンドモード
yyで一行コピー
pでペースト
今回のblog_app.sqlの編集内容
create table users( id int not null primary key auto_increment, name varchar(50), email varchar(255), password varchar(16), weight float, joined datetime );
以上を編集したらmysqlに戻り以下を実行。
mysql -u dbuser001 -p blog_app < blog_app.sql
dbuser001のパスワードを使ってblog_appにblog_app.sqlの内容を読み込む
しかしblog_appに内容がすでにあるのでエラーとなる。
sqlファイルに
drop table if exists users;
と先頭に追記するとbog_appのデータは消えて内容が読み込まれる。
外部ファイルからデータを取り込む
先ほどのファイルにinsert文を追記し取り込む。
insert into users(id,name,email,password,weight,joined) value (null,'tanaka','tanaka@foo.com','xxxxx','53.8','2011-05-11 19:00:22'); insert into users(id,name,email,password,weight,joined) value (null,'yoshida','yoshida@foo.com','xxxxx','52.3','2011-04-02 19:32:22'); insert into users(id,name,email,password,weight,joined) value (null,'kimura','kimura@foo.com','xxxxx','66.8','2011-03-15 20:00:22');
idがnullなのはauto_incermentを使ってるから。
取り込んだらselectなどで実際にデータが見れるか確かめてみる。
補足
mysqlなどから抜けるときexitでもいいが\qでも抜けれる。
注意事項
- 自分用の覚書です。
- 自分が後から読んで理解できる程度にはしょったりまとめたりしています。
- 後で誤りに気付いた時は随時訂正しています。
- 「ドットインストール」で勉強したのでそれらをなぞっています。
mysqlのメモ5
関数
length
長さを表示
select length(email),name from usres;
emailの文字の長さ順に名前をソート
select * from users order by length(email);
なども可能。
mysqlのメモ4
select
表示するフィールドを指定する
select id,name from users;
*は内容全部を表示していたがこちらは指定して表示する。
この例はidとnameを表示する。
select name,id from users;
と、順番を変えることも可能。
mysqlのメモ3
レコードの更新
update
update users set id = 2 where name = 'tanaka';
usersテーブルのidを2にする。場所(条件)はtanakaというname。
という感じで。
レコードの削除
delete
delete from users where id =3;
id3のレコードが消えますよと。where指定しないと全部消えるので注意。
mysqlのメモ2
テーブルの作成
create table
create table users(x,x,x);
usersというテーブルが作られるのでそれを仮定して書く。
テーブルの(x,x,x)内にフィールドを定義していく。
xはフィールドの名前とデータの型。
id intだったらidというフィールドに数字
name varchar(50)だったらnameというフィールドに
50(全角なら25)文字内の文字列をという意味。
