我有一些工作代码,但我正在寻求改进,以减少往返数据库的次数。
摘要
我有三个数据库表:users = [user_id, firstname, lastname]
relationship = [relationship_id, user_id_one, user_id_two, tag_id]
tag = [tag_id, tag]
我代码中的逻辑是:
if(tagDoesntExist) { createTag(tag) }
if(checkIfUserExists(useronedetails) && checkIfUserExists(usertwodetails)) {
createRelationship(useronedetails, usertwodetails, tag)
}
这至少包含4个数据库调用。我是否可以将标记和关系的创建合并到同一个调用中?
另外,作为最后的优化,我可以把它全部推到一个数据库调用中吗?这将创建基于两个用户的关系和标签?
最佳答案
对于条件插入,可以使用插入…选择语法:
Insert into mytable(name,cola) (select myname,vala from dual where not exists (select 1 from mytable where name=myname))
您可以使用Philippe提到的
insert... on duplicate key update
您可以将这两个命令放在一个字符串中,并用
;
分隔它们最后,您可以编写自己的存储过程来执行所有任务(检查,插入,如果不存在,检查是否存在关系并插入)。这不仅是到DB的单程,而且发送到DB的查询也是最短的。