SQLに関する質問です。


テーブルは3つあり、テーブル1とテーブル2はautoincrementなidをもち、テーブル3はそれらのidの対応表です。

テーブル2にinsertするときに同時にテーブル3にもinsertしたいです。

・これを解決する方法
・この設計の問題点と改善案

いずれかご教授ください。
環境はMySQL+Connector/Jです。
show table statusは使わない方向でお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:kacchan6 No.1

回答回数106ベストアンサー獲得回数0

ポイント10pt

・解決方法

トリガーを使えばいいかと思います。

・問題点

テーブル2にテーブル1のIDを持たせればいいだけではないでしょうか。

id:esseesse

MySQLはトリガーに対応していないと記憶していますが。

このような構造にしたのはテーブル1とテーブル2を多対多の関係にしたいためです。

なので、テーブル2にテーブル1のIDは持たせられないと思っています。

2004/09/11 15:12:14
id:kacchan6 No.2

回答回数106ベストアンサー獲得回数0

ポイント10pt

ポイントは結構です。

多対多であれば、テーブル1にはテーブル2のIDを持たして、

テーブル2にはテーブル1のIDを持たせれば、

外部結合で多対多の関係で抽出は可能です。

例)

select

*

from

table1,table2

where

table1.id = table2.t1ID or

table2.id = table1.t2ID

どうしてもテーブル3にインサートしたいのであれば、

自力でインサートするしかなさそうですね。

id:esseesse

この場合、テーブル1、テーブル2ともに似たようなエントリ(参照先が異なるだけのエントリ)が増えませんか?

ディスクの効率とupdateやselectの時のオーバーヘッドが気になります。

テーブル3の利用に関しては絶対ではないのでよりよい方法があればその方法をとろうと思っています。

すみません、もう少しお付き合い願います。。。

2004/09/11 16:18:52
id:inokuni No.3

回答回数1343ベストアンサー獲得回数21

ポイント100pt

http://dev.mysql.com/doc/mysql/ja/Miscellaneous_functions.html

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.6.2 その他の各種関数

LAST_INSERT_ID関数を使えば、AUTO_INCREMENT カラムに挿入された値のうち、最後に自動生成された値を返します。

table2 へ INSERT した後、

INSERT INTO table3 VALUES (LAST_INSERT_ID());

みたいな感じで table3 へ INSERT するのはいかがでしょうか?

id:esseesse

なるほど、接続ごとに制御がかかってるんですね。

これなら競合が起こっても正しく動作しそうですね。

ありがとうございます!

今回は考えていないことなんですが、テーブル1とテーブル2を一緒にinsertしたらちょっと破綻しちゃいそうですね。

2004/09/12 17:17:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません