アプリ版:「スタンプのみでお礼する」機能のリリースについて

MYSQL 3.23
auto_incermentで発行されたIDを別テーブルに使いたいのです。

last_insert_id や mysql_insert_id はコネクションごとに区別されるというのは本当でしょうか?

同時に複数のinsertが実行された場合でも、同じコネクションで発行されたIDだけを取得可能でしょうか?

よろしくお願いします。

A 回答 (2件)

「多くの場合、ユーザは、複数のテーブルの


一意の識別子を管理するために ROLLBACK や
LOCK TABLES を使用していた。これは、
AUTO_INCREMENT カラムおよび SQL 関数
LAST_INSERT_ID() または C API 関数
mysql_insert_id() を使用することで、
はるかに効率的に処理することができる。」
とありますので、一応は保証されていると考えて
よいのではないでしょうか。もちろん私が、保証
することはできませんので、自己責任で判断すべき
ことです。
3.23はトランザクション環境にないため、厳密に
整合性を保つためにはid管理は使用者側が任意に
行うべきだというのが個人的な感想です。

お役にたてませんで、申し訳ないです

参考URL:http://dev.mysql.com/doc/refman/4.1/ja/ansi-diff …

この回答への補足

大変助かります。
ありがとうございます。

最終的な手段としては、auto_incrementのIDを生成するためだけのテーブルを作成して、
テーブルA、テーブルBと共にPRIMARYをセットしておけば、
データの整合性が保たれるのではないかと考えていました。

引き続き、もう少し自分でも調べてみようと思います。
ご回答本当にありがとうございます。

補足日時:2006/04/11 20:10
    • good
    • 0

もうすこし具体的にお願いします。


last_insert_id()は確かに最終発行された
auto_incrementの値を返す様ですが、セッション
が切れると参照ができないようです。
(所定の措置を入れれば別?)

試した感じ、そのセッションのinsertされたIDが
返されているようなので特に問題ないかとは
思いますが、実際にそれが信用できるかどうかは
微妙です。
select文を発行してidを得る方が間違いないかと
思いますがいかがでしょうか?

この回答への補足

回答ありがとうございます。
auto_incrementを使用しているテーブルには、他にユニークなデータを持つカラムがありません。order by 句はやろうとしている事から、使用不可能です。

やろうとしていることとしては、
テーブルAには
auto_incrementのIDとその他データ
テーブルBには
テーブルAに挿入されたデータと関連したその他データ

つまり、テーブルBのレコードは、テーブルAに挿入してできたauto_incrementのIDのあるレコードと関連した情報を持つ予定です。
この二つのテーブルを関連づけるものとして、auto_incrementで発行されたIDを使用したいと思っています。


(プログラムとしてはapacheモジュールのPHPを使用しています。)
そこで、
同時に始めのinsertが実行されてしまった場合、last_insert_idで
それぞれのinsertで発行されたIDを取得できるのかどうか疑問でした。

よろしくお願いします。

補足日時:2006/04/11 01:00
    • good
    • 0

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

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