1
すぎゃーん💯 @sugyan
[SQL][Perl]SQLでincrementした値を表示する方法を考える http://d.hatena.ne.jp/sugyan/20110120/1295481689
Kazuho Oku @kazuho
UPDATE ... SET col=LAST_INSERT_ID(col+1); として LAST_INSERT_ID に値を格納して、それを読むというハックがあるぉ / SQLでincrementした値を表示する方法を考える - す… http://htn.to/hAt7wA
Kazuho Oku @kazuho
postgresql は returning 節があっていいよな
すぎゃーん💯 @sugyan
@kazuho おぉっ、そういう方法があるのですね…知りませんでした。ありがとうございます!!
すぎゃーん💯 @sugyan
@nekokak えーと 自分が試してた環境は 0.08126 です。
nekokak @nekokak
@sugyan $fuga_rs->find_or_createでpageview => 0渡してますけど、find_or_createの挙動かわったのかしら?
nekokak @nekokak
これfind_or_newの間違い?
徳永 広夢 @tokuhirom2
ていうか、find_or_createしたら、insertかかる可能性ないよね??
すぎゃーん💯 @sugyan
@nekokak あ! そうですね… ご指摘ありがとうございます ><
nekokak @nekokak
find_or_createはトランザクションセーフじゃないので死ぬときがあるので注意
徳永 広夢 @tokuhirom2
ていうか、find_or_newって、高確率でコンフリクトして死ぬ気がするんだけど、気のせいか?
nekokak @nekokak
find_or_newはつかわないなぁ
すぎゃーん💯 @sugyan
@nekokak 全然そのあたり考えていませんでした… find or createなことを安全にやるなら必ずtransaction使う、ということになりますかね?
徳永 広夢 @tokuhirom2
@sugyan transaction くんだ上で、最初の SELECT にFOR UPDATE かけないとだめなかんじすね
nekokak @nekokak
@sugyan MySQLだったらinsert ignoreでいくとか
nekokak @nekokak
まぁトランザクションが一番かな
nekokak @nekokak
なのでTengではPlugin扱い
すぎゃーん💯 @sugyan
@tokuhirom @nekokak なるほど… 勉強になりました。ありがとうございます!
nekoya @nekoya
@sugyan だいぶ話が変わってしまうけど、似たようなケースで衝突回避したい&毎回DB更新してられんので、クライアントはmemcachedにincrするだけにしてバッチでDBに反映とかで解決したことが。
Ryuta Kamizono @kamipo
MySQL なら INSERT INTO ... ON DUPLICATE KEY UPDATE ... を使うといいですお! RT @nekokak: @sugyan MySQLだったらinsert ignoreでいくとか
nekokak @nekokak
あ、そっちのがいいすねー RT @kamipo: MySQL なら INSERT INTO ... ON DUPLICATE KEY UPDATE ... を使うといいですお! RT @nekokak: @sugyan MySQLだったらinsert ignoreでいくとか
すぎゃーん💯 @sugyan
@kamipo @nekoya いろんなやり方があるんですね >< ありがとうございます!!
SQL

コメント

quabbin @quabbin 2011年1月20日
FirebirdとORACLEでもRETURNINGが使えるみたいですね。
ログインして広告を非表示にする
ログインして広告を非表示にする