人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

php/mysqlについて。

データベースへデータを保存するときに、例えば

「ユーザーデータ」を

・テーブルA(認証用にメアド・パスワード)
・テーブルB(名前などその他の情報)

の2つに保存したいとします。

この場合、2回SQLを発行しますが、
もし「テーブルAに登録した後、テーブルBの登録時になにかエラーがあった」場合、
どのような処理を行なえばいいのでしょうか?

DBのシステムはMyISAMを使っています。

このような「ユーザーが1回ボタンを押すと、2ヶ所のテーブルへデータを保存・更新」するとき、
どのような処理を行なうべきなのか、参考になる情報などがありましたらお願いします。

●質問者: onigirin
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:MyISAM MySQL PHP なう エラー
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント

利用場面や運営方針によりますね。軽く例をあげていきたいと思います

(A案)トランザクションもどきの判断をphpで行う

・面倒だし、phpで行うなら素直にInnoDB使うほうが簡単で高速ですね

(B案)テーブルAだけで何が悪いと開き直る

・テーブルAの情報はそのまま残して「詳細情報の登録は失敗しました」と再登録を促がす

・テーブルAはメアドをプライマリキーとしておいて INSERT ... ON DUPLICATE KEY UPDATE 構文での書き込み処理を行う

http://dev.mysql.com/doc/refman/5.1/ja/insert-on-duplicate.html

(B案改)テーブルAとテーブルBの登録は分ける

・とりあえずシステムを利用するために「メアド/パスワード登録」を行わせ、詳細に使いたいなら「名前などの詳細情報登録」を行わせるという2つの作業に分けてしまう

ケースバイケースなので、まだまだ案はあると思いますが、無難なところでやっぱりInnoDB使っておけばいいという結論になりそうな気もします

◎質問者からの返答

どうもありがとうございます。

フレームワークを使っているので、プライマリーキーが連番idに固定されているので、InnoDBが良さそうですね。

InnoDB使ったことないのですが、ちょっと調べてトランザクション試してみます。

B案の、開き直りで再登録を促す作戦はあちこちでごり押しで使えそうなので、いいですね(笑)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ