如果不存在表中字段的特定值,如何插入记录(sql查询)?

时间:2018-02-01 12:37:34

标签: mysql sql

我有一个表usersbooks:

idUser - int
idBook - int
bookSummary - text

和这种情况:

idUser idBook bookSummary

   1     1       modifiedInfoAboutTheBookByTheUser
   1     2       modifiedInfoAboutTheBookByTheUser
   1     3       modifiedInfoAboutTheBookByTheUser

   2     1       modifiedInfoAboutTheBookByTheUser
   2     3       modifiedInfoAboutTheBookByTheUser

   3     2       modifiedInfoAboutTheBookByTheUser
   3     3       modifiedInfoAboutTheBookByTheUser

我需要插入像

这样的记录
   #user #book initalInfoAboutTheBook

对于每个组合书籍用户(具有相应的初始信息),但是某些记录仍然存在,并且必须 NOT 被覆盖或更新,因为它们可能与初始信息不同。有些缺失,例如用户2没有预订2,用户3没有预订1,这些是必须插入的。

假设我可以对for循环进行多次查询,每本书都有一个循环,例如

"INSERT INTO usersbooks 
idBook='+idBook+' ..... "

with idBook 0 to 10, for example

什么是INSERT查询才能在不触及现有记录的情况下获得所需的结果?

idUser idBook bookSummary

   1     1       modifiedInfoAboutTheBookByTheUser
   1     2       modifiedInfoAboutTheBookByTheUser
   1     3       modifiedInfoAboutTheBookByTheUser

   2     1       modifiedInfoAboutTheBookByTheUser
   2     2       initalInfoAboutTheBook            (newly inserted!)
   2     3       modifiedInfoAboutTheBookByTheUser

   3     1       initalInfoAboutTheBook            (newly inserted!)
   3     2       modifiedInfoAboutTheBookByTheUser
   3     3       modifiedInfoAboutTheBookByTheUser

注意:这里有两个问题:如何避免触及现有记录以及如何对db中已存在的任何用户执行查询

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案就是这样。
您可以尝试使用idUser和idBook这两个字段创建主键, 然后使用插入忽略。这样可以避免重复键错误,并在主键(两个ID的组合)不存在时插入。