• 締切済み

LAST_INSERT_IDの使い方

お世話になります。 早速ですが 1、トランザクション 2、テーブルAにインサート 3、テーブルBにインサート 4、テーブルCにインサート 5、コミット のような処理の時に、テーブルAでインサートしたレコードの IDをテーブルBとCに入れたいので、テーブルBに入れる時に LAST_INSERT_ID()を使うと思い通りの処理になりました。 しかし、テーブルCにインサートする時にはLAST_INSERT_IDの 値はテーブルBのインサート時のIDとなり、テーブルAのIDでは ありません、当然ですが。。 こういった場合、テーブルAのインサートIDを取得保持するには どのようにすればいいのでしょうか? どうか、ご教示ください。

  • MySQL
  • 回答数2
  • ありがとう数0

みんなの回答

  • kikutoma
  • ベストアンサー率38% (13/34)
回答No.2

例えばその行番号を取得する処理をストアドにしたらどうですか?

回答No.1
hornest
質問者

補足

ご回答ありがとうございます。 当方 Connector/Net で開発しておりまして、変数を使用すると Fatal error encountered during command execution というエラーが起きて実行できないのでありますT-T

関連するQ&A

  • トランザクションとlast_insert_id

    トランザクション中にinsertする予定のテーブル(未コミット)のauto_increment値を取得することはできるのでしょうか。 以下のような処理を期待しているのですが、hoge1テーブルのauto_increment値が取得できずに困っております。last_insert_id に関わらず、hoge1テーブルのauto_increment値が取得できる方法があれば教えてください。 (1) トランザクション開始 (2) $sql=" INSERT INTO hoge1(name) value('あああ'); "; (3) ( ロールバック ) (4) $key=mysql_insert_id(); (5) $sql2=" INSERT INTO hoge2(hoge1_primary,age) value($key,'20歳'); "; (6) ( ロールバック ) (7) コミット (8) トランザクション終了 よろしくお願いします。 環境: php5,mysql5 (InnoDB)

    • ベストアンサー
    • MySQL
  • LAST_INSERT_IDで同時にアクセスが会った時

    MYSQL 3.23 auto_incermentで発行されたIDを別テーブルに使いたいのです。 last_insert_id や mysql_insert_id はコネクションごとに区別されるというのは本当でしょうか? 同時に複数のinsertが実行された場合でも、同じコネクションで発行されたIDだけを取得可能でしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • バルクINSERT直後に、最後のIncremet値は取得できますか?

    PHPからMySQLへトランザクションを使わずに、 INSERT INTO test (id,count) VALUES (5,5),(6,6) のようにINSERTした直後に、SELECT LAST_INSERT_ID(); としても、5が返却されてしまいます。 これはMySQLの仕様でしょうか? 又、 SELECT LAST_INSERT_ID() ではなく、 SELECT LAST_INSERT_ID() FROM test; のようにテーブル名を指定する方法は何か意味があるのでしょうか? テーブル名を指定すると、テーブルにあるレコード数分 データが返却されてしまいました。。

    • ベストアンサー
    • MySQL
  • シーケンス型で取得した値を別テーブルで利用する方法

    シーケンス型で取得した値を別テーブルで利用する方法を別テーブルの設定したい場合,どうすればいいでしょうか. 例えば,商品情報が入っている商品テーブルのidを価格テーブルに結びつけたい場合 ・トランザクション開始 ・商品テーブルにinsert ・コミット ・トランザクション開始 ・シーケンスより最大値を取得 ・価格テーブルにシーケンスより得られた値を含めてinsert ・コミット このままですと価格テーブルの時に何らかの問題でロールバックした場合,商品テーブルには価格テーブルと関係性がないレコードができてしまいます.

  • 排他処理について

    VBでトランザクションをかけてあるテーブルを処理しています。 具体的にはテーブルAのレコードを一時的に別テーブル(テーブルB)に コピーしてそのレコードすべてを元のテーブルから削除して、 テーブルB内で処理をさせてから、そのデータをテーブルAに戻して コミットしています。 この処理中に、別PGもしくはSQLPlusでテーブルAからテーブルBに コピー対象の1レコードを削除してコミットしました。 これってエラーになる?ならない?それともトランザクション中だから テーブルAがコミットされて開放されるまで待ちの状態になる?? 実際どうなったかというとエラーにならなくて、その処理で最後に テーブルAにテーブルBをコピーしたときにエラーになって データがきえるという現象がおきてしまいました。 上記のような処理のときにOracle条ではどのような処理になるのでしょうか? よろしくお願いします。

  • mysql_insert_id()の使い方

    過去記事を参照させていただいたのですが、 値を取ってくることができず修正点がわかりません。 アドバイスいただければと思いますのでお願いします。 テーブルは 「userid」「user_name」「bil_id」「bil_name」 で、「user_name」「bil_id」「bil_name」は、 他から「in1」~で読み込んでいます。 //SQL $sql= "insert into user set user_name=($_POST["in1"]),bil_id=・・・(略) $rec=mysql_insert_id(); print($rec); 書き方に不明な点が多いですがコメントよろしくお願いします。

    • ベストアンサー
    • PHP
  • <VB.NET>INSERT文でDBにデータを入れたい 

    プログラム初心者です。 ボタンを押したらtextboxの値がDBのテーブルに格納されて画面が閉じるという処理をしたいです。 そして他の画面でボタンを押すとINSERT済みのテーブルが出るという 処理をしようと思っています。 今のところは、他の画面でボタンを押してもINSERT済みのテーブルが でないという状態です。元のテーブルのデータはでます。 サンプルを見つけてやってみたのですが、思った結果がでません。 public sub botton1-click dim sql_insert as string dim cmd_insert as oledbcommand dim strconn as string = "provider = ~OLEDB4.0 = ~.mdb" DA = New oledbDataAdapter conn = New oledbconnection(strconn) sql_insert = "INSERT INTO A組(名前) VALUES(TextBox1.Text) cmd_insert = New oledbcommand(sql_insert,conn) DA.insertCommand = cmd_insert Me.colse end sub DataAdapterはdatasetを使わず直接DBに格納させるINSERTの時にでも 使うのでしょうか? 自分自身まだよく分かっていないので、正しいコードと処理の流れを 教えて欲しいです。 使っているのはaccess2000、VB.NET2003です。よろしくお願いします。

  • マージレプリケーション ID値の返し方

    知識が浅く、自力で解決できないのでご協力お願い致します。 SQL Server2005を使用しています。 サーバーAとサーバーBで、マージレプリケーションで同期をとっているテーブルがあります。 Aの方のテーブルにストアドプロシージャを実行してINSERTし、そのID値(シーケンス番号)を直後にアウトプットとして取得したいのですが、どうも上手くクエリがうまく書けません。 例: AとBのあるテーブルには自動付番のシーケンス番号60までデータがあります。 AにINSERTして新規に追加されたデータのシーケンス番号は61となるので アウトプットとしてその61を返したいのですが、 マージの影響でコミット前のIDを返すのでしょうか、2など全く違った値が返ってきます。 実際にテーブルを確認すると、ちゃんとAもBもシーケンス番号61で新規追加されています。 現状のクエリではINSERT文のあとに 『SET @no_seq = @@IDENTITY』と記述していて、 マージレプリケーションを解除していれば@no_seqに正しいID値を返します。 他には ・@no_seq = SCOPE_IDENTITY ・@no_seq = IDENT_CURRENT('table_name') を試しましたが結果は同じでした。 クエリの書き方なのか、あるいは マージレプリケーションの設定にも詳しくないので なにか原因に心当たりがあれば教えて頂きたいです。 よろしくお願い致します。

  • トランザクション処理について

    質問させて下さい。 以下の処理を行なっております。 1. トランザクション処理開始 2. テーブルAからデータをDELETE 3. テーブルBへデータをINSERT 4. トランザクション処理終了 上記処理の場合の「TYPE=InnoDB」指定の仕方が不安です。 現在はロールバックの可能性のあるテーブルAのみ「TYPE=InnoDB」を指定しています。 その状態でコミットもうまくいっているのですが、テーブルBに「TYPE=InnoDB」を 指定しなくてもよいものなのでしょうか。 環境 MySql 4.0.24

    • ベストアンサー
    • MySQL
  • 何故、mysql_insert_id が not a valid になるのでしょうか?  

    MySQLバージョン サーバ5.0.45、 クライアント 3.23.49 Apache2.0.61 (Win32) PHP4.4.7 の環境下で、 名称 member, id int(10) unsigned not null auto_increment、 name, varchar(20) not null, mail varchar(30) not null のテーブルを作りました。          次のスクリプトを書いて <?php session_start(); $name = $_POST["name"]; $mail = $_POST["mail"]; print_r($_POST); $conn = mysql_pconnect("localhost", "ABC", "XYZ") or die("Can't connect"); mysql_select_db("SIMEI", $conn) or die("db error") ; $query = "INSERT INTO member (name, mail) VALUES ('$name','$mail')"; $result = mysql_query($query, $conn); //$oid = 'mysql_insert_id($result)'; //''で括ってみる $oid = mysql_insert_id($result); // ← 11行 $result = mysql_query( "SELECT id FROM member WHERE oid = $oid", $conn); if($result){ print("insert OK");}  echo "Can't insert "; $_SESSION['id'] = mysql_result($result, 0); // ← 14行 mysql_close($conn); ?> これを実行すると、 データはmysql DB に登録されますが、下記のエラーが出て、id を取得できません。 何故でしょうか? どうすれば不具合を解決することができるでしょうか? Warning: mysql_insert_id(): supplied argument is not a valid MySQL-Link resource in C:\・・・・\insert.php on line 11 Warning: mysql_result(): supplied argument is not a valid MySQL result resource in C:\・・・・・\insert.php on line 14

    • ベストアンサー
    • MySQL