使用 MySQL/InnoDB 一致地在 2 个表中创建 2 条记录

发布于 2024-09-10 23:59:01 字数 351 浏览 2 评论 0原文

假设我有两个表,t1t2

t1 = (id, 姓名), t2 = (id, fid)

t2 中的 fidt1 的外键。

创建行的步骤如下。

  1. 在 t1 中插入一行,获取 id
  2. 使用该 id 并将其作为 fid 插入到 t2 中。

我的问题是:

由于事务未提交时t1的id是未知的,那么如何执行对t2的插入?

Consider I have two tables, t1 and t2

t1 = (id, name), t2 = (id, fid)

The fid in t2 is a Foreign Key to t1.

Steps to create rows as following.

  1. Insert a row in t1, get the id
  2. Use that id and insert as fid in t2.

My problem is:

Since t1's id is unknow when the transaction is not committed, so how to perform the insertion to t2?

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

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

发布评论

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

评论(1

痴意少年 2024-09-17 23:59:01

如果 id 在 table1 中自动递增,那么您可以执行以下操作:

INSERT INTO t1 (name) VALUES ('whatever');
INSERT INTO t2 (fid) VALUES (LAST_INSERT_ID());

这来自 MySQL 参考手册

编辑:如果我插入 3 个表 t1、t2、t3 怎么样?t2 和 t3 的 fid 都等于 t1。但是当t3插入fid时,LAST_INSERT_ID()属于t2,而不是t1。

然后你可以做这样的事情:

INSERT INTO t1 (name) VALUES ('whatever');
SET @id=LAST_INSERT_ID();
INSERT INTO t2 (fid) VALUES (@id);
INSERT INTO t3 (fid) VALUES (@id);
...

If id is auto-incremented in table1 then you can do something like this:

INSERT INTO t1 (name) VALUES ('whatever');
INSERT INTO t2 (fid) VALUES (LAST_INSERT_ID());

This comes from the MySQL Reference Manual.

EDIT: How about if I am inserting 3 tables t1, t2, t3 Both t2 and t3 have a fid equal to t1. But when t3 insert the fid, the LAST_INSERT_ID() is belong to t2, not t1.

Then you could do something like this:

INSERT INTO t1 (name) VALUES ('whatever');
SET @id=LAST_INSERT_ID();
INSERT INTO t2 (fid) VALUES (@id);
INSERT INTO t3 (fid) VALUES (@id);
...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文