2017-01-19 13 views
1

こんにちは私は3つのconectedテーブルを持っているので、データベースにリストを作成しようとしているデータベーステーブルの例を教えてあげようと思います。参照idhoofdtoonder今ソートのMySQLデータベースにリストを翻訳するためのID、接続テーブルに今MYSQL innerjoin複数のテーブルを挿入

vogelsoort 

id|naam|idhooftoonder| 

idhoofdtoonderリファレンス(テーブルの論理が下に追加される)

hoofdtoonder 
|pkey|Id|idondersoorten 

のクエリ次の表にそのID

ondersoort 
id|naam 

私も、私はまだMySQLでの十分な経験がないよ、これを求めてごめんなさい

編集:質問は、私は、単純なINSERTクエリを試みたので、それはi「は、既存のデータを上書きしています(idhootoonderはhooftonder(id)とhooftoonder idontersoortenへの参照はondersoort(id)への参照ですが、ondersoortのすべてのデータが同じvogelsoortに接続されているわけではないので、既存のIDと接続を上書きしないで挿入を助けます。既存の接続を上書きしません

+0

あなたはまだ何かを試してみましたか?あなたの質問は完全に明確ではありません。 –

答えて

1

各テーブルに1つずつ、挿入文が3つ必要です。
TRANSACTIONを使用して安全に行うことができます。
あなたがLAST_INSERT_ID()関数を使用する必要があります(あなたのPKフィールドは、このためのAUTO_INCREMENTていなければなりません)、ドキュメント:http://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id

START TRANSACTION; 

INSERT INTO ondersoort (id, naam) VALUES (NULL, 'data'); 
INSERT INTO hoofdtoonder (pkey, Id, idondersoorten) VALUES (NULL, NULL, LAST_INSERT_ID()); 
INSERT INTO vogelsoort (id, naam, idhooftoonder) VALUES (NULL, 'data', LAST_INSERT_ID()); 

COMMIT; 
+0

はい、しかし、既存のondersoortテーブル情報を上書きするのは、vogelsoortテーブルから他のondersoortenがあるためです。挿入時にondersoortからのIDを取得する方法があれば、既存のデータを上書きすることから最大の問題です。テーブルを2つ接続すると、既存の接続に接続またはオーバーライドしません –

+0

LAST_INSERT_ID()関数を使用できます。あなたのPKフィールドはこのためにauto_incrementされていなければなりません。 文書:http://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id – mochalygin

+0

おかげであなたのライブセーバーが実際にもっと安全になりました –

関連する問題