チョコレート島

朝から子供が「部屋中をチョコレートで一杯にする」といって、なにやらいろいろ作っていた。大量の紙を茶色のクレヨンで塗りつぶし、それを丸めたり、切ったり、貼ったり。理由は分かっている。金曜のアンパンマンで見たチョコレート島の影響だ。島にあるものすべてチョコレートなのだそうだ。木や草が生えるようにチョコレートが生え、川はチョコレートドリンクが流れているのだそうだ。

休出して帰宅すると、床には筍のようなチョコレートが20本くらいメンディングテープで固定されている。壁には板チョコ、窓にはバナナチョコ、みかんチョコ、ぶどうチョコが貼り巡らされている。ここにもあるよと、自慢の作品の数々を教えてくれる。これから1週間くらいはこのままの状態だろう。せめて筍だけは抜かせてもらいたい。

先週はラーメンてんしのおかげでどんぶりを10個ほど作らされ、今週はこの状態だ。さらに今日は会社にいる時、妻から「子供がチーズフォンデュ食べたいと言ってるので買ってきて」という。おそらく録画のアンパンマンチーズフォンデュさんを観たのだろう。影響の受け過ぎだ。アンパンマン、偉大過ぎる。

チーズフォンデュラゾーナのSANWAで買って帰った。

無知な妻

面白ネタに対する期待が大きいようだ。ではまず無知な妻のエピソードを2つほど紹介しよう。妻はお嬢様でも箱入りでもない。ただ抜けてるだけなのだ。

南武線に乗っているときだ。停車する各駅の名前になにやら気づいたらしい。「武蔵なになにという駅が多いね。武蔵ってなんのこと。京急線京急なになに駅とは違うよね。この線は南武線だし」ときた。「えっ、武蔵野台地とか関東ローム層とか習わなかったか。武蔵の国、知らないの?」

次はもっと衝撃的だ。袋井の倉庫に出張に行くときの電車での会話だ。秋の車窓を眺めながら言ったらしい。「きれいだね、あの広い畑で作られてる黄色いものは何だろうね。一杯あるね」ときた。まさしくそれは金色に輝く稲穂であった。日本人の魂、米も知らんのか。これが小学生の会話なら許せるが、社会人20歳後半の話なのだ。

妻ではあるし、公開されるプログでは表現を抑えなくてはならない。ただ抜けてるだけと表現したが、一般に通用している言葉で差替えてもらって構わない。

MySQL

プロト作成という開発案件の可能性がある。実はもう丸4年もコードを書いたことがないのだ。何でいまさらこの老体にプログラムを書かせるのだ。しかし、悲しいかなサラリーマン。会社や上司の方針を批判しても仕方ない。まずは開発環境を構築して、基本的なことを思い出すことから始めよう。

まずMySQLをインストールしてRDBの復習だ。INSERT文の構文さえ覚えていなかった。

パスワードの解除

# rootにpasswordが設定されているのにpasswordなしで接続しよう
# とすると、次のように拒絶される。
$ mysql -uroot mysql
ERROR 1045 (28000): Access denied for user 
'root'@'localhost' (using password: NO)
# rootのpasswordを削除する(設定なし状態に戻す)
$ mysql -uroot -pxxx mysql
> update user set password=PASSWORD('') where user='root';
> flush privileges;     # これを忘れると反映されない!
# userを確認する
> select host,user,password from user;
> select host,user,password from mysql.user; 
# rootにはpasswordが設定されていない。
> quit                  # quit,\q,exit,byeのどれでも同じ!

コマンド利用

$ mysql -uroot mysql
# データベースを見る
> show databases;
# テーブルを見る
> connect mysql;        # use mysqlでも可! (connect=use)
> connect;              # 現在接続しているDBが分かる!
> show databases;
> show tables;
> select host,db,user from db;
> show status;
> show variables;
> show variables like 'char%';  # where句が添えられる!
> \h                            # ?,\?,help,\hのどれでも同じ!
?         (\?) Synonym for `help'.
clear     (\c) Clear command.
connect   (\r) Reconnect to the server.
delimiter (\d) Set statement delimiter. 
ego       (\G) Send command, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
notee     (\t) Don't write into outfile.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file.
status    (\s) Get status info from the server.
tee       (\T) Set outfile [to_outfile]. 
use       (\u) Use another database. 
charset   (\C) Switch to another charset. 
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.

基本操作

# データベースの作成/削除
# テーブルの作成/削除
# テーブルへのデータ登録/更新/削除
#
> create database modle;
> drop database modle;
> create database moodle;
> create table dummy (id int(5) default '0' 
  not null, name varchar(32) not null);
> insert into dummy (id,name) values (123, 'hachi');
> insert into dummy values (45, 'nana');  # カラム名省略!
> select * from dummy;
> update dummy set name='roku' where id=45;
> delete from dummy where id > 100;
> select * from dummy;
> drop table dummy;
> show tables;

ユーザと権限

# user:          ユーザの基本的な定義  
# host:          接続クライアントのホストに対する権限
# db:            DBに対するアクセスの権限
# tables_priv:   テーブルに対する権限
# columns_priv:  フィールドに対する権限

> connect mysql;
> insert into user (host,user) values ('localhost','xxuser');
# こんな感じでの登録はダメ!

> grant select,insert,update,delete on moodle.* to 
  moodleuser@localhost identified by 'moodleuser';
> flush privileges;
> select host,user,password from user;
> update user set password=PASSWORD('') where user='moodleuser';
> flush privileges;
> select host,user,password from user;
> select * from user where user='moodleuser'\G

だいぶん思い出してきた。あらたな発見もあった。以前、my.iniはC:\windowsの直下にあったが、最近のバージョンではインストールディレクトリにあるらしい。またMySQLでは、SQL文内での大文字小文字が区別されるが、それはDB名とTABLE名のみでCOLUMN名は区別されない。(COLUMN名も区別されると思っていた)