例如,如果列A被定义为唯一值,且值为1,则下列语句具有相同的效果。也就是说,一旦记录中有一个= 1,直接更新C = C + 1,而不执行C = 3操作。
复制代码代码如下所示:
在重复键上插入表(A,B,C)值(1, 2, 3)
更新C = C + 1;1更新表集C = C + 1,其中A = 1;
值得一提的是,报表知识MySQL不在标准sql语句中。
插入..复制密钥更新多行记录
如果重复密钥更新是在插入语句结束后指定,插入一行,它会导致一个唯一索引或主键重复的值,然后执行旧线更新;如果它不引起的独特价值列复制,插入新的一行。例如,如果列定义为独特的、包含值1,以下两种说法都有同样的效果:
复制代码代码如下所示:
插入表(A,B,C)
值(1,2,3)重复密钥更新C = C + 1;
更新表集C=C + 1,其中a = 1;
如果将行插入为新记录,则受影响行的值为1;如果更新原始记录,则受影响行的值为2。
如果你想知道更多关于插入的功能描述…在复制的钥匙,看MySQL参考文件:第13.2.4。插入语法
现在的问题是,如果插入以多行记录,那么如何在重复密钥更新之后指定以下字段的值要知道INSERT语句中只有一个重复密钥更新,无论他将更新一行还是更新所有需要更新的行。这是困扰我很久的问题。事实上,所有的问题都是用值()函数来解决的。
例如,该领域是独特的,并有记录(2,2,9)和(3,2,1)在原始数据库中的表。如果插入记录的值与原始记录重复,则更新原始记录,否则插入新行。
复制代码代码如下所示:
插入到表(a,b,c)值中
(1,2,3),
(2,5,7),
(3,3,6),
(4,8,2)
关于重复密钥更新b =值(b);
上述SQL语句的执行发现在(2,5,7)与原记录的独特价值冲突(2,2,9)。然后重复密钥更新时,原来的记录(2,2,9)更新为(2,5,9)、的(3,2,1)更新为(2,2,9),和新的记录插入。
注意:重复密钥更新只是MySQL的惟一语法,而不是SQL标准语法!