1

それぞれが他方の主キーへの参照を必要とする 2 つのテーブルにレコードを入力する最良の方法は何ですか?

私の考えは、それらの間に「リンク」テーブルがあり、両方がデータベースに書き込まれるか、次の複雑な一連のコマンドによって取り込まれます

Insert1
get identity1
Insert2 
get identity2
update 1

mySQL データベースに接続して整合性を維持しながら、PHP でこれを行うにはどうすればよいでしょうか?

トランザクションを使用する必要がありますか?

4

3 に答える 3

3

テーブルが相互に参照する必要がある理由を尋ねてもよろしいですか。単純な 1:1 の場合は、テーブルの 1 つに外部キーを配置することをお勧めします。ルックアップも同様に簡単です。また、外部キーを適切に適用できます。そうしないと、両方のテーブルが相互に参照する必要がある鶏と卵のシナリオに遭遇します。ただし、最初に作成する必要があります。これは、ある時点でデータベースが一貫性のない状態になることを意味します。

于 2009-01-26T11:34:58.597 に答える
1

本当にそれをしなければならない場合は、必ずトランザクションを使用してください - 孤立したレコードを避けるために

mysql_query("START TRANSACTION");
if(!mysql_query($query1))
{   $errmsg=mysql_error();
    mysql_query("ROLLBACK");
}
else
{  $id1=mysql_insert_id();
   $query2="insert into.....$id1...");
   if(!mysql_query($query2))
   {   $errmsg=mysql_error();
       mysql_query("ROLLBACK");
   }
   $id2=mysql_insert_id();
   if(!mysql_query("update tabel1 set my_key=$id2 where key=$id1"))
   {   $errmsg=mysql_error();
       mysql_query("ROLLBACK");
   }

}
mysql_query("COMMIT");
于 2009-01-26T12:26:59.020 に答える
0

トランザクションを使用する必要があります。InnoDb ストレージ エンジンを使用する場合、MySql は新しいバージョンでこれをサポートします (ただし、MyIsam ではサポートしません)。

于 2009-01-26T19:52:26.250 に答える