読者です 読者をやめる 読者になる 読者になる

第20回 中国地方DB勉強会で登壇してきたよ(*´ω`*) @ikkitang

第20回中国地方DB勉強会 が開催されたよ

4月8日(土) に 第20回の中国地方DB勉強会が開催されました。
最高の勉強会だったので、ちょっとブログをしたためます^^

当日のTwitterまとめ
第20回 中国地方DB勉強会 in 岡山 まとめ #ChugokuDB - Togetterまとめ

初めてのDBに関する登壇

自分、去年の7月から、仕事上で設計をするような業務が増えてきまして。
そこで、役立った制約について、まとめて発表をしました。

発表の内容について

仕事では、MySQLしか使った事ない僕ですが、今回はPostgreSQLを中心にした内容になってます。

私事ですが、4月より、 JPUG (日本PostgreSQLユーザー会) の正会員になった事もあります。

勉強していく気持ちです。

当日のTwitterの感想

非常に色んな反応を返して頂いて嬉しかったです。

〜 便利じゃん とか XXXXって○○○○じゃんとか、AAAってBBBって使い方もあるよねとか。
自分の発表に反応があるって嬉しいですよね。

分からない事を分からないっていう勇気

今回、発表するにあたって、検証してみたけど、理解出来ず、自分の言葉に落とし込めないのが二箇所ありました。

素直に 「わかりません」 って言いましたw

これが逆に良い方向に転んでくれて、勉強会に参加のメンバーで知識を出し合ってくださって、結果的に良い方向に話が進みました。

ありがてぇ。。。

皆さん、偉そうに発表してる人の中にもスーパーエンジニアじゃない人もいますからね!
だから、君も中国地方DB勉強会に来て発表しましょう^^

他の発表について

dbstudychugoku.github.io

正真正銘スーパーエンジニアの方達の発表です。

学びありまくりの資料なので、是非、ご活用ください。

結びの言葉

自分は、これまで、色々な大きなイベントに参加してきました。
その度に、色んな方がブログを書いたりされていて、盛り上がっているのを見て、「ああ、行ってよかった。 この盛り上がり、最高だな。」 とか思ってました。

今回は、確かに数字だけ見ると、20名という少ない参加者なのかもしれません。

でも、

参加率は100%だったし、

たったの20人で、日本の風物詩 と、 バズワードを抜いて、2位の盛り上がりを見せてました。

しかも、次の日も、自分のTwitterアプリのトレンドに出てきてました。

このパワーは本当凄い。

今後も、来た人皆が、何か一つ持って帰れる勉強会である事と同時に、その対象を増やしていけるような勉強会でありたいな、と感じます。

最高の勉強会でした。

次回告知

夏、山口で開催予定です^^ たのしみー。

是非、今後とも、よしなにm( )m

オープンセミナー2017@広島 #OSH2017 未来の社会を感じた勉強会でした。 @ikkitang

osh.connpass.com

この土曜日は上記のリンクのセミナー: オープンセミナー2017 @広島でした。

エンジニアがより良い社会を作れる

どの登壇もとてもいい刺激になりました。

月曜日から、活かしていきたい考え方であったり、個人のプログラミング開発においても、もっと、モチベーション高くやっていきたいな、と思いました。

自分だけの「オンリーワン」・・なんなんだろうね。 そういうの見つけたい。

LT登壇

この素晴らしい社員に役職を! とかいって、自分の事 “素晴らしい” とか言ってますねwww

恥ずかしい奴ww

まあ、元ネタは最近、流行りのアニメから撮りました。
このすば! 面白いですよね。 自分の高校の同級生の声優の人が所属しているグループの人がなんと、あのめぐみんの声優をされてるらしく、応援してます!w

さて、まあ、内容といては、主任になってからの取り組みといいますか、そんな事をやった感じです。

テーマ間違い

スライドの最初にもあったように、今回のテーマを「エンジニアがより良い会社を作れる」 だと空目しまして。。

じゃあ、「エンジニア(自分)がより働きやすい会社を作りたくて取り組んだ事」的なのを話してみたいな、って思ったんですが、 「エンジニアがより良い社会を作れる」でしたねww

次は岡山で

okayama.open-seminar.org

是非、5月、ご参加ください!

あ、下記写真、お納めください。

#お好み焼き #広島お好み焼き #hiroshima #osh2017 #オープンセミナー広島2017やっぱり、お好み焼きって最高やな(´ω`)

MySQLしかやったこと無い僕がPostgreSQLへのドアを叩いてみる。『指定したカラムに更新日を自動で入れてくれる ON UPDATE句について』 #mysql #postgresql

注意

※すみません。 MySQLの話です。

PostgreSQL入門にて気づいた事。

ドットインストール PostgreSQL入門 #05 フィールドに制約をつけてみよう を見てた時に、
知った事について、まとめてみようかと。

驚いたのは、default制約についてですね。
created timestamp default 'now' とする事で、
created という timestamp 型 のカラムに対して、初期値 現在時刻 を代入する事が出来る、という制約です。

※※ ただし、公式のドットインストールにもありましたが、
この制約は、 初期値に テーブル作成の日時 が入ってしまう制約らしいです。※※

正しくは、こちら。

※ ちなみに、ドットインストール だと、 created timestamp default statement_timestamp() としてください、って書いてあったんだけど、何が違うんでしょう?

ともあれ、今まで、ずっと、 created カラムに NOW() を入れていた () 僕としては。。

PostgreSQL いいなー。

MySQL にもあったら良いのに。。

あった

全然、公式ページ ( MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.3.5 TIMESTAMP および DATETIME の自動初期化および更新機能 ) にあった。。

知らんかった。。。

それだけじゃない

また、読んでいくと..

ON UPDATE CURRENT_TIMESTAMP なんてのを付けると、
なんと、テーブルの更新があれば値を更新日時で更新してくれるらしい、と。

今まで、ずっと、 updated カラムに NOW() を入れていた僕としては・・・

という事で、以下、試してみました。

参考になれば、幸いです。

試してみました。

テストのDB date_test_mysql を作って、 users テーブルを作ります。

mysql> create database date_test_mysql character set utf8;
Query OK, 1 row affected (0.01 sec)

mysql> create table users (id int NOT NULL PRIMARY KEY AUTO_INCREMENT, name varchar(255), created datetime default CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.04 sec)

mysql> show create table users;
+-------+-----------------------------------------+
| Table | Create Table                                                                                                                                               
+-------+-----------------------------------------+
| users | CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `created` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------+
1 row in set (0.01 sec)

データを一件、Insertします。

想定としては、 created カラムに、 現在時刻が入る事を想定します。

mysql> select now();
  2017-01-24 00:00:41

mysql> insert into users (name) values ('test111');
Query OK, 1 row affected (0.01 sec)

mysql> select * from users;
+----+---------+---------------------+
| id | name    | created             |
+----+---------+---------------------+
|  1 | test111 | 2017-01-24 00:00:50 |
+----+---------+---------------------+
1 row in set (0.01 sec)

おおー!

試しに、もう一件。

mysql> select now();
  2017-01-24 00:02:30

mysql> insert into users (name) values ('test222');
Query OK, 1 row affected (0.01 sec)

mysql> select * from users;
+----+---------+---------------------+
| id | name    | created             |
+----+---------+---------------------+
|  1 | test111 | 2017-01-24 00:00:50 |
|  2 | test222 | 2017-01-24 00:02:44 |
+----+---------+---------------------+
1 row in set (0.01 sec)

2レコード目もその時の時刻で、入ってくれました。

まとめ:
created datetime default CURRENT_TIMESTAMP とすれば、初期値として、登録日時が入る。

ON UPDATE 句 について

続いて、ON UPDATE CURRENT_TIMESTAMP について調べてみたいと思います。

さっきのテーブルに対して、変更を加えていきます。

mysql> select now();
  2017-01-24 00:12:51

mysql> alter table users add column updated datetime default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from users;
+----+---------+---------------------+---------------------+
| id | name    | created             | updated             |
+----+---------+---------------------+---------------------+
|  1 | test111 | 2017-01-24 00:00:50 | 2017-01-24 00:12:52 |
|  2 | test222 | 2017-01-24 00:02:44 | 2017-01-24 00:12:52 |
+----+---------+---------------------+---------------------+
2 rows in set (0.00 sec)
mysql> select now();
  2017-01-24 00:22:22

mysql> update users set name = 'test111_2' where id = 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from users;
+----+-----------+---------------------+---------------------+
| id | name      | created             | updated             |
+----+-----------+---------------------+---------------------+
|  1 | test111_2 | 2017-01-24 00:00:50 | 2017-01-24 00:22:23 |
|  2 | test222   | 2017-01-24 00:02:44 | 2017-01-24 00:12:52 |
+----+-----------+---------------------+---------------------+
2 rows in set (0.00 sec)

2017-01-24 00:12:52 から 2017-01-24 00:22:23 になりました。

まとめ:
updated datetime ON CURRENT_TIMESTAMP とすれば、更新したタイミングで、更新した時の日時が入る。

まとめ

これで、また、ビジネスロジックを減らす事が出来ますね。

PostgreSQLを学んでると、MySQLで分かってない事とか知らない事とか、新たな発見がありすぎて、とても面白いですね。

でも、CURRENT_TIMESTAMP ってどの位置づけになるんだろう? 関数?

あ、そういえば、これ書きながら思ったんですけど、 自分、DB には、 登録日時更新日時 カラムを入れるように教わったんですけど、 それって標準なんかな?