Mysql,如果表A中存在外键,则将新记录插入表B.

时间:2016-05-24 10:41:52

标签: mysql select insert key

这里有一些类似的问题。没有提供解决方案。我想将记录插入到表 B 中,但前提是表 A 中存在外键。要清楚,我不希望插入选择的结果。我只需要知道外键存在。

INSERT INTO tableB (tableA_ID,code,notes,created) VALUES ('24','1','test',NOW())
        SELECT tableA_ID FROM tableA WHERE tableA_ID='24' AND owner_ID='9'

显然,上述方法无效。但这有可能吗?我想将新数据插入到tableB中,前提是tableA中的行记录存在且属于owner_ID。

到目前为止,我看到的查询涉及从SELECT查询中插入结果 - 我不希望这样做。

2 个答案:

答案 0 :(得分:2)

试试这个:

INSERT INTO tableB (tableA_ID,code,notes,created) 
SELECT id, code, notes, created
FROM ( SELECT '24' as id, '1' as code, 'test' as notes, NOW() as created) t
WHERE EXISTS 
(
   SELECT tableA_ID 
   FROM tableA 
   WHERE tableA_ID='24' AND owner_ID='9'
)

答案 1 :(得分:0)

我知道这是一个很老的答案,但是现在它在Google搜索结果中的排名很高,我认为将来有可能会有所帮助。

在某些数据库配置中,您可能希望在具有两个或更多外键的表中插入一行。假设我们在聊天应用程序中有四个表: UsersThreadsThread_UsersMessages

如果我们希望User加入Thread,我们将在Thread_Users中插入一行,其中有两个外键:user_id,{{1 }}。

然后,我们可以使用像这样的查询来插入是否存在两个外键,否则将自动失败:

thread_id

这有点冗长,但是可以很好地完成工作。

在应用程序端,如果受影响的行= 0,我们只需要引发一个错误,并可能尝试查看哪个键不存在。恕我直言,这是比执行两个SELECT查询然后再执行INSERT更好的方法,尤其是在不存在外键概率非常低的情况下。