重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

 いつもお世話になります。

 主キーで検索して、あればupdate、なければinsert という処理を行うにあたって、行の挿入と更新を 1回のSQLで行いたいのですが、oracleでいうmerge文のようなものはmysqlではないのでしょうか??

 1回で行いたい理由としては、有り無しの調査をしてからInsertするまでの間に他ユーザーが同時実行をして主キー重複が起きないようにです。

 マニュアルを見た所、見あたらなかった為、普通にInsert時のエラー処理で、再試行をしようと思っておりますが、皆様どうされてますでしょうか?

 他に良い方法があればと思い、投稿させていただいております。
 
 ご教示いただけると嬉しいです。

A 回答 (4件)

こんにちわ。



はずれていたら申し訳ない。

ON DUPLICATE KEY UPDATE というものがあります。

>ON DUPLICATE KEY UPDATE 節(MySQL 4.1.0 の新機能)が指定されている場合に、PRIMARY または UNIQUE キーでの重複値の生成を招くレコードが挿入されると、古いレコードの UPDATE が実行される。次に例を示す。

このあたりがそうかと思います。
参考URLをみてみてください。

参考URL:http://dev.mysql.com/doc/refman/4.1/ja/insert.html
    • good
    • 0
この回答へのお礼

お礼が遅くなり、すみません。
 リンクを拝見いたしました。
 まさに、やりたいのはソレでした。教えて下さって有り難うございます。
   ・・・・・ただ・・・・使用しているバージョンが低いようです。残念。
 また、別の環境で使用する時があれば是非使わせていただきたいと思います。
 有り難うございました。

お礼日時:2007/04/16 20:02

MySQLのバージョンは、何でしょうか?



#1さん回答の「PL/SQL」というのはOracleでの名前であり、標準SQLやそれに準じたMySQLでは、ストアドプロシジャやストアドファンクションであり、バージョン5.0からサポートされています。

MySQL 5.0のマニュアルは英文しかなく、使用例も少なかったので、Wikipediaに例題を作成していますので、もしよろしければ一度ご覧ください。

参考URL:http://ja.wikipedia.org/wiki/CREATE_PROCEDURE
    • good
    • 0
この回答へのお礼

 お礼が遅くなり、すみません。
バージョンは3.23.58です。
 随分古いようですね(*_*)

お礼日時:2007/04/16 20:00

プライマリーで判断してよいのであれば、REPLACEでやるとよいでしょう。



http://dev.mysql.com/doc/refman/4.1/ja/replace.h …

この回答への補足

有り難うございます。
 言葉が足りず、申し訳なかったのですが、REPLACEでは、全て上書きされてしまいますよね?
 データがあった場合は、他の列はそのままで、更新日時のみupdate という処理を行いたいので、今回はREPLACEは使えないのです・・・
 また、Insert Ignoreも、少々違うようで・・・

補足日時:2007/04/11 17:07
    • good
    • 0

こんにちは



どういう用途に使うのでしょうか?
PL/SQLで簡単なプロシージャーでも作れば、簡単かと思いますが、、、。

この回答への補足

有り難うございます。
php + mysqlで使用しております。
 データがなければinsert、あれば更新日時のみupdate という処理を行いたいのですが・・・・・

補足日時:2007/04/11 17:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す