1

MySQL でテーブルを結合する方法を学び始めたばかりです。今、訪問者がフォームからデータを挿入できるようにしたい小さなプロジェクトがあります。次に、データは 4 行の HTML テーブルに表示され、データベース内の 2 つのテーブルが結合されます。「問題」は、データベース内のこれら 2 つの異なるテーブルにデータを送信する必要があることです。

私は試した

$query = "INSERT INTO table1, table2 (col1, col2, col3, col4) VALUES ('value1', 'value2', 'value3', 'value4')";

しかし、それはそうではないようです。フォーム データを複数のデータベース テーブルに送信するための正しい構文は何ですか? ああ、トランザクションの使用について言及している同様のスレッドをいくつか読みました。これは必要ですか?私のテーブルは MyISAM で実行されます。ありがとう!

4

6 に答える 6

1

詳細については、MySQL マニュアルを参照してください。つまり、一度に複数のテーブルに挿入することはできません。これにより、次の 3 つのオプションが残ります。

  1. 複数のINSERTステートメント
  2. トリガー
  3. ストアド プロシージャ

この質問に対する答え: MySQL Insert into multiple tables? (データベースの正規化?) MyISAM では機能しないトランザクションを使用することをお勧めしますが、InnoDB に切り替える場合は参考にしてください。

Triggersを読むことを強くお勧めします。彼らはあなたの人生をずっと楽にすることができます。しかし、それらを使用したくない場合は、PHP のmysqli_multi_queryを調べてください。これにより、2 つの異なるクエリを同時に実行できるようになります。次に例を示します。

$query = "INSERT INTO table1 (col1,col2) VALUES ('$value1','$value2');";
$query = "INSERT INTO table2 (col3,col4) VALUES ('$value3','$value4');";
$result = mysqli_multi_query($dbcon, $query);
于 2012-12-09T00:24:46.480 に答える
0

私は間違っているかもしれませんが、同時に複数のテーブルに挿入することはありません。それを 2 つ以上のコマンドに分割し、それぞれが特定の挿入を処理します。大したことではありません。1 行余分なコード (これによりすべてが明確になります) を入力するのは面倒です。

このように見てください。たとえば、データを処理するルーチンなどの大きなスクリプトを作成する場合、コードを分割すればするほど、デバッグが容易になり、必要に応じて問題のある命令を接種すると、終了します。長期的には時間を節約できます。

于 2012-12-09T00:21:55.600 に答える
0

これは、MySQL トランザクションを使用して実行できます。

BEGIN
INSERT INTO table1 (col1, col2...ETC) 
  VALUES('value1', 'value2'...ETC)
INSERT INTO table2 (col1, col2...ETC) 
  VALUES('value1', 'value2'...ETC);
COMMIT;
于 2012-12-09T00:22:33.813 に答える
0

MyISM では、挿入するテーブルごとにクエリを実行する必要があります。単一のクエリで複数のテーブルに追加できるとは思いません。

あなたの場合、トランザクションはエンジンでサポートされていないため、使用できません。

于 2012-12-09T00:23:35.543 に答える
0

唯一の解決策は、できればトランザクション内で、いくつかの個別のクエリを使用することです。各クエリからのデータが確実に挿入されるようにする場合はCOMMIT、トランザクションが必要です。クエリの 1 つが失敗した場合は、次のことができROLLBACKます。

PS InnoDBを使用します。INSERTクエリがすべてのクエリの少なくとも 5% を占めるほとんどすべての環境で優れています(残念ながら、数か月前に読んだのでソースを示すことができず、場所を思い出せません)。

于 2012-12-09T00:21:40.040 に答える