2009-11-10 65 views
3

假设我有两个Tabels,A和B,每个都有三列(A.id,A.title,A.text和B.id,B.a_id,B.text)。 B.a_id是涉及A.id的外键。现在,假设A(1,'foo','bar')中有一条记录,B(1,1,'test')和(2,1,'test1')中有2条记录。使用外键复制多个记录

我的问题是,是否存在一个复制A中记录的标准方法,同时复制B中与A相关的所有记录。因此,假设我在A(2,'' (1,'foo','bar')是否有某种方法可以在B(3,2,'test')和(4,2, “测试1)?

我从来没有使用触发器,这是开始做这件事的正确时刻?或者这是一个非常愚蠢的问题?

回答

4

这不是一个愚蠢的问题。不过,我相信这对于纯SQL来说是不可能的,或者只有一些我不知道的奇特语法。复制行是没有问题的(假设id为AUTO_INCREMENT):

insert into A (title, text) select title, text from A where id = XY 

但是,那么你需要找到最后插入ID复制在B的记录让我们来看看:

insert into B (a_id, text) select LAST_INSERT_ID(), text from B where a_id = XY 

嗯......也许这有效,但我对LAST_INSERT_ID()有点怀疑。无论如何,我认为这只能用一个声明来完成。

让我知道如何去

汤姆

+0

大,这个作品!谢谢!这比我使用的方法更容易(使用单独的选择和插入查询)。 – 2009-11-10 13:31:29

+0

很酷。我从来没有使用过这种组合插入...选择语法之前,无论是。谢谢你让我知道。 – 2009-11-10 13:37:36

+0

这甚至可以在其他进程更新表时工作,因为''LAST_INSERT_ID()''查看当前进程插入的ID,并忽略其他进程插入的ID。 – kmoser 2017-07-25 04:20:15