• 締切済み

複数テーブルへの同時INSERT

ASPとAccessを使用して書籍管理システムを作成する勉強をしています。 以下のようなテーブルがあったとします。 HTMLの書籍管理システムのフォームから、ISBN,Title,Categoryを入力させて送信すると 2つのテーブルに対して同時に登録するのですが、 複数のDBに対してどのようにINSERT文をかけばよいのか、またどのように同期をとればよいのか悩んでおります。 table AとBのBookIDはリレーションシップになっております。 どなたかお知恵を拝借できないでしょうか。 [table A] BookID ISBN Title [table B] BookID Category

  • oen
  • お礼率58% (7/12)

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 テーブルA、Bが分かれている理由はなんなのだろうか。まぁそれはおいておいて。  ASPなど、動的ページシステムでDB操作を行うにはトランザクションが欠かせない。例えばADOを使いSQL Serverに接続している場合は、 adoConn.BeginTrans adoConn.Execute "insert into A ・・・" adoConn.Execute "insert into B ・・・" adoConn.CommitTrans などとなる。AとBのリレーションシップというのも良く分からない。A.BoolIDがB.BoolIDの外部キーまたはその 逆なのだと推測されるが、それならば参照されている側の方からInsertしてやれば良い。

oen
質問者

お礼

トランザクションで同期がとれました。 どうもありがとうございました。

関連するQ&A

  • マルチテーブル・インサート

    ご教授よろしくお願い致します。 現在、table_aにInsertされたカラム(no,name)のデータを同時にtable_bにも反映するSQL文を考えております。 【table_a】              no | name | price               ==============         005  apple   500         001  banana  250         【table_b】 no | name | color ================= 005  apple   red 001  banana  yellow Insertをそれぞれのテーブルで実行すれば、もちろん反映はできるのですが一度のInsert文でできるのならそれにこしたことはありません。 いろいろ調べた結果、下記のサイトでできるようなことが記載してあったため、実行したのですが、『ALL』がシンタックスエラーとなってしまいます。 そのため、postgresのマニュアルを確認してみたところ、Insert文にALL句の指定は特別記載されていなかったため、できないとも思っているのですが… サイト↓ http://www.atmarkit.co.jp/fdb/rensai/sqlclinic12/sqlclinic12_1.html サイトを参考にしたSQL文 『INSERT ALL INTO table_a(no,name) VALUES(005,apple) INTO table_b(no,name) VALUES(005,apple); 』 何か良い方法をご存知の方がいましたら、ご教授よろしくお願い致します。同じことをUpadteでもやらなければいけないのですが、それはもう少し自分で考えてみます。 只、できないことが明白な場合は、ご指摘を頂けると有難いです。 環境としましては、 OS 【Windows xp】 DB 【PostgreSQL 8.2】 です。

  • insert文等で「`」の有無で失敗するテーブルとしないテーブルがある。

    XAMPP(winXP、PHP4)を使っています。 Aのテーブルでは $query= "insert into table (a,b,c,d) values('1','2','3','4')"; $result = mysql_query($query); でデータが追加されるのに、Bのテーブルでは失敗しました。 今日ずっと何が間違っているのかわからなかったのdですが、 $query= "insert into table (`a`,`b`,`c`,`d`) values('1','2','3','4')"; $result = mysql_query($query); とすると成功しました。 なぜAのテーブルでは「`」が無くても成功したのに、Bのテーブルでは必要なのでしょうか。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • IDENTITY列の複数テーブルへのINSERT

    テーブルAへINSERTをした場合のIDENTITY列の値を 同じトランザクション内で テーブルBの別のフィールドへINSERTしたいのですが、 どのようにSQLを書けばよいのか、困っています。 どうか、ご教示お願い致します。 INSERT INTOTABLE_A (NAME_A) VALUES ('あいうえお') ↓ INSERT INTOTABLE_A (A_ID,NAME_B) VALUES (取得したA_ID, 'さしす') INSERT INTOTABLE_A (NAME_A) VALUES ('かきくけこ') ↓ INSERT INTOTABLE_A (A_ID,NAME_B) VALUES (取得したA_ID, 'たちつ') INSERT INTOTABLE_A (NAME_A) VALUES ('さしすせそ') ↓ INSERT INTOTABLE_A (A_ID,NAME_B) VALUES (取得したA_ID, 'なにぬ') TABLE_A ID NAME_A 5  'あいうえお' 6  'かきくけこ' 7  'さしすせそ' TABLE_B ID A_ID NAME_B 1  5  'さしす' 2  6  'たちつ' 3  7  'なにぬ'

  • select insertで複数テーブルから値を取得したい

    環境:oracle9i select insertで、2つのテーブルから値を取得して、1つのテーブルにinsertすることは可能でしょうか? たとえば、以下の場合、どのようなSQL文を書けばよいか、アドバイスいただけますでしょうか。 よろしくお願いします。 insertしたいテーブル:A Aテーブルの項目:o,p,q,r,s,t 値を取得するテーブル:B,C Bテーブルの項目:o,p,q,r Cテーブルの項目:o,p,s,t oとpが主キーになっていて、それらが一致するBとCのデータを あわせて、Aにinsertしたいと思っています。 insert into A(o,p,q,r,s,t) select このあと、どのように書けばよいのかがわかりません。

  • INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい

    挿入するフィールドの内1つだけを他のテーブルから取ってきた値を使いたいのですが、 insert into table1 (field1, field2, field3) values('a', (select field2 from table2 where field4='xxx'), 'b'); Oracleだと↑の書き方でいけるのですが、PostgreSQL(6.5.3)だとエラーになってしまいます。 2回もDBにアクセスしにいくのはいやなので、1文で書きたいです。上記以外で他の書き方をご存知でしたら教えてください。よろしくお願いします。

  • データベースを複数作ったほうが良いでしょうか?

    Win+Apache+PHP+MySQLで、自宅サーバを立てています。 データベース名:DB_A  テーブル:Table_A データベース名:DB_B  テーブル:Table_B とするべきか、 データベース名:DB_A  テーブル:Table_A,Table_B とするべきか悩んでいます。 データベースについてあまり理解していないのですが、データベースを分けると何がどう変わるのでしょうか? (分けたほうが、高速化するのでしょうか?利点など教えていただければありがたいです。)

  • [SQLServer]既に存在するテーブルに他のテーブルからデータをINSERT

    SQL初心者です。 既に存在するTable_A(レコード0件)に対して、これまた既に存在するTable_B(レコード100件)の内容をINSERTしたいです。次のように書くとだめですよね。 (Table_AとTable_Bのレイアウトはまったく同じ) select * into Table_A from Table_B 何か策はあるのでしょうが、ちょっと探しきれません。お分かりになるかた教えてください。

  • 複数のテーブルの検索について

    お世話になっております。 題名にありますように、複数のテーブルに登録のあるデータを、テキストフォームやチェックボックス、プルダウンなどのフォームで入力(選択)されたものを(PHPにて)検索したいと考えておりますが、googleなどで調べていても、キーワードが適切でないためか、得たい情報を得られずにおります。 以下のようなテーブル構成で、上記質問のような検索をする場合、(googleなどで検索するには)どのようなキーワードが適切でしょうか?ソースを教えていただくのが簡単ですが、理解を深めたいと考えての質問です。お忙しい中恐縮ですが、アドバイスのほど宜しくお願いいたします。 table_a id name address category table_b no id title subject 上記テーブルA、Bに設定されたフィールドを、各フォームににて入力(選択)されたフォームで一括で検索するソースを学びたいのです。 ※table_a と table_b にある id で紐付けています。

  • SELECT文の発行でタイムアウトします

    以下のようなテーブルがあります。 BooksDataテーブルのBookIDから、 BooksCategoryテーブルのCategoryIDを調べ CategoryNameを表示したいと考えておりますが SELECT文が実行中にタイムアウトになってしまいます。 何か悪いところはございますでしょうか。 [BooksData] BookID ISBN Title [BooksCategory] BookID CategoryID [BooksM_Category] CategoryID CategoryName SELECT BMC.* FROM BooksM_Category AS BMC, BooksCategory AS BC WHERE BookID=XXX AND BMC.CategoryID=BC.CategoryID

  • INSERTしたテーブルデータの参照

    いつもお世話になっています。 早速ですが質問したいことがあります。 環境は、ORACLE11gです。 よろしくお願いします。 PL/SQLにて、テーブルAに対してINSERTを行い、テーブルAにINSERTした データを元にデータを作成し、テーブルBにINSERTをしたいと考えています。 COMMITは、プログラムの処理が全て終わった後に行います。 一応プログラムを作成し、想定どおりの動作を確認できたのですが、一点だけ 気になることがあります。 テーブルAにデータをINSERTしてから、COMMITせずに、テーブルBのデータを 作成するために、テーブルAのデータを取得します。その際、最初に登録した テーブルAのデータは、テーブルBを作成する際、必ず取得できるのでしょうか。 (一応作成したプログラムでは取得できていますが、必ず取得できるものなのか  を教えていただきたいです。) COMMITは、仕様上プログラムが全て終わった後にしか行えません。 質問は以上です。 質問文がごちゃごちゃして見難くてすみませんが、ご回答よろしくお願いします。

専門家に質問してみよう