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

SQLに関する質問です。

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

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

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

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

●質問者: esseesse
●カテゴリ:コンピュータ
✍キーワード:MySQL SQL 問題点 対応 改善
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kacchan6
●10ポイント

http://my.yahoo.co.jp/

My Yahoo!

・解決方法

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

・問題点

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

◎質問者からの返答

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

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

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


2 ● kacchan6
●10ポイント

http://my.yahoo.co.jp/?a=a

My Yahoo!

ポイントは結構です。

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

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

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

例)

select

*

from

table1,table2

where

table1.id = table2.t1ID or

table2.id = table1.t2ID

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

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

◎質問者からの返答

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

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

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

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


3 ● いのくに
●100ポイント

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 するのはいかがでしょうか?

◎質問者からの返答

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

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

ありがとうございます!

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

関連質問


●質問をもっと探す●



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