使用需要相互引用的记录填充两个表的最佳方法是什么?

发布于 2024-07-12 04:10:14 字数 270 浏览 7 评论 0原文

在两个表中填充记录的最佳方法是什么,每个表都需要引用另一个表的主键?

我的想法是,要么在它们之间建立一个“链接”表,一旦两者都写入数据库,就会填充该表,或者通过以下复杂的一系列命令,

Insert1
get identity1
Insert2 
get identity2
update 1

在连接到 mySQL 数据库并保持完整性的同时,您如何在 PHP 中执行此操作?

您是否需要使用事务,如果需要,您将如何进行?

What is the best way to populate records in two tables that each need a reference to the primary key of the other?

My thoughts are either having a "link" table between them which is populated once both have been written to the db or by the following complex series of commands

Insert1
get identity1
Insert2 
get identity2
update 1

How would you do this in PHP whilst connected to a mySQL Database and maintain integrity?

Would you need to use transactions, if so how would you go about doing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

多像笑话 2024-07-19 04:10:14

我能问一下为什么这些表需要互相引用吗? 如果是直接 1:1 那么我建议将外键放在其中一个表中。 查找也同样简单。 并且您的外键可以得到正确执行。 否则,您会遇到先有鸡还是先有蛋的情况,其中两个表都需要相互引用。 但需要先创建一个。 这意味着在某个时刻您的数据库将处于不一致状态。

Can I ask why the tables need to reference each other. If it is a straight 1:1 then I would suggest just putting the foreign key in one of the tables. the lookup is just as easy. And your foreign key can be properly enforced. otherwise you run into a chicken/egg scenario where the tables both need to reference each other. but one needs to be created first. This means at a certain point your database will be in a non consistent state.

放手` 2024-07-19 04:10:14

如果您确实必须这样做,那么一定要使用事务 - 以避免孤立记录

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");

If you really must do it , then definitely use transactions - to avoid orphan records

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");
酒浓于脸红 2024-07-19 04:10:14

你需要使用交易。 如果您使用 InnoDb 存储引擎(但不适用于 MyIsam),MySql 在较新版本中支持此功能。

You need to use transactions. MySql supports this in newer versions, if you use the InnoDb storage engine (But not for MyIsam).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文