我有一个表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中已存在的任何用户执行查询
答案 0 :(得分:1)
一个简单的解决方案就是这样。
您可以尝试使用idUser和idBook这两个字段创建主键,
然后使用插入忽略。这样可以避免重复键错误,并在主键(两个ID的组合)不存在时插入。