Home

ガードブロッキング的ブログ

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)文字内の文字列をという意味。

全文を読む

Home

カテゴリー
フィード
訪問者への貢献度LV

Return to page top