http://d.hatena.ne.jp/sugyan/20110120/1295481689 のフィードバック

アドバイスやご指摘いただいたのでまとめておきます。 ありがとうございました!
SQL
1
すぎゃーん💯 @sugyan

[SQL][Perl]SQLでincrementした値を表示する方法を考える http://d.hatena.ne.jp/sugyan/20110120/1295481689

2011-01-20 09:01:29
Kazuho Oku @kazuho

UPDATE ... SET col=LAST_INSERT_ID(col+1); として LAST_INSERT_ID に値を格納して、それを読むというハックがあるぉ / SQLでincrementした値を表示する方法を考える - す… http://htn.to/hAt7wA

2011-01-20 09:39:16
Kazuho Oku @kazuho

postgresql は returning 節があっていいよな

2011-01-20 09:39:35
すぎゃーん💯 @sugyan

@kazuho おぉっ、そういう方法があるのですね…知りませんでした。ありがとうございます!!

2011-01-20 10:17:20
すぎゃーん💯 @sugyan

@nekokak えーと 自分が試してた環境は 0.08126 です。

2011-01-20 10:27:22
nekokak @nekokak

@sugyan $fuga_rs->find_or_createでpageview => 0渡してますけど、find_or_createの挙動かわったのかしら?

2011-01-20 10:30:17
nekokak @nekokak

これfind_or_newの間違い?

2011-01-20 10:32:56
徳永 広夢 @tokuhirom2

ていうか、find_or_createしたら、insertかかる可能性ないよね??

2011-01-20 10:33:03
すぎゃーん💯 @sugyan

@nekokak あ! そうですね… ご指摘ありがとうございます ><

2011-01-20 10:34:42
nekokak @nekokak

find_or_createはトランザクションセーフじゃないので死ぬときがあるので注意

2011-01-20 10:35:01
徳永 広夢 @tokuhirom2

ていうか、find_or_newって、高確率でコンフリクトして死ぬ気がするんだけど、気のせいか?

2011-01-20 10:38:50
nekokak @nekokak

find_or_newはつかわないなぁ

2011-01-20 10:40:37
すぎゃーん💯 @sugyan

@nekokak 全然そのあたり考えていませんでした… find or createなことを安全にやるなら必ずtransaction使う、ということになりますかね?

2011-01-20 10:55:21
徳永 広夢 @tokuhirom2

@sugyan transaction くんだ上で、最初の SELECT にFOR UPDATE かけないとだめなかんじすね

2011-01-20 10:56:06
nekokak @nekokak

@sugyan MySQLだったらinsert ignoreでいくとか

2011-01-20 10:56:48
nekokak @nekokak

まぁトランザクションが一番かな

2011-01-20 10:57:12
nekokak @nekokak

なのでTengではPlugin扱い

2011-01-20 11:01:04
すぎゃーん💯 @sugyan

@tokuhirom @nekokak なるほど… 勉強になりました。ありがとうございます!

2011-01-20 11:02:06
nekoya @nekoya

@sugyan だいぶ話が変わってしまうけど、似たようなケースで衝突回避したい&毎回DB更新してられんので、クライアントはmemcachedにincrするだけにしてバッチでDBに反映とかで解決したことが。

2011-01-20 11:37:55
Ryuta Kamizono @kamipo

MySQL なら INSERT INTO ... ON DUPLICATE KEY UPDATE ... を使うといいですお! RT @nekokak: @sugyan MySQLだったらinsert ignoreでいくとか

2011-01-20 11:38:10
nekokak @nekokak

あ、そっちのがいいすねー RT @kamipo: MySQL なら INSERT INTO ... ON DUPLICATE KEY UPDATE ... を使うといいですお! RT @nekokak: @sugyan MySQLだったらinsert ignoreでいくとか

2011-01-20 11:41:26
すぎゃーん💯 @sugyan

@kamipo @nekoya いろんなやり方があるんですね >< ありがとうございます!!

2011-01-20 11:49:14