MySQL的替换和重复密钥更新语句引入了这个问题的一个例子。
当一回头,遇到这样的需求,有身份在电影表(主键增量)和进行排序(排序字段),有十的ID数据分别从1-10的假设,相应的订货从1-10,我想移动到ID = 9的数据现在第三的位置(ID = 3)这个位置,并确保数据的前后顺序(即ID = 3 = 4 = 4的ID进行排序,orderby = 5…id = 8的orderby = 9),所以,如果我们使用循环的形式,我们可以解决数据的问题,但有太多的数据库操作。现在我们想用SQL语句解决这个问题。以下是mysql的替换和插入…ON DUPLICATE KEY UPDATE
更换
我们经常会遇到这种情况的时候,我们使用一个数据库。如果表建立一个领域一个独特的指标,当我们插入一条记录到表中现有的核心价值观,它将抛出一个主键冲突错误。当然,我们可能要盖新记录的价值的原始记录值如果您使用的是传统的方法,你必须先使用DELETE语句删除原来的记录,然后用插入以插入新的记录,在MySQL数据库中,一个新的解决方案提供给我们的,这是取代声明。当插入记录的更换,如果更换不重复,插入功能:插入相同。如果有重复记录,则新记录值将被新记录值替换。
使用替换的最大优点是将删除和插入相结合形成一个原子操作,这不需要考虑复杂的操作,例如在使用删除和插入同时添加事务。
当使用替换时,表必须具有唯一的索引,而索引所在的字段不允许空值,否则替换与插入值完全相同。
在实施更换,系统返回受影响的行数,如果返回1,显示在表中没有重复的记录,如果返回2,这是一个描述重复记录,系统自动调用Delete删除该记录,然后用插入插入一条记录。如果返回值大于2,表明有多个唯一索引,和多个记录的删除和插入。
插入…ON DUPLICATE KEY UPDATE
插入的作用…关于重复密钥更新:在插入数据时,如果插入的数据中对应的主键或唯一索引的值已经在表中,则该数据的相应字段值将被修改。如果不存在,则直接插入该字段值。
如果在重复密钥更新和插入行上指定,它将在唯一索引或主键中产生重复的值,然后执行旧行更新。例如,如果列A被定义为唯一且包含值1,则以下两个语句具有相同的效果:
复制代码代码如下所示:
MySQL >插入表格(A,B,C)值(1,2,3)
>关于重复密钥更新C = C + 1;
更新表集C=C + 1,其中a = 1;
如果将行插入为新记录,则受影响行的值为1;如果更新原始记录,则受影响行的值为2。
注意:如果列B是唯一的列,则插入相当于这个UPDATE语句。
复制代码代码如下所示:
更新表集C = C + 1,其中A = 1或B = 2限制1;
如果a = 1或b = 2匹配多行,则只更新一行。一般来说,您应该避免使用带有多个关键字的表使用重复关键字子句。
你可以使用价值(col_name)功能在更新条款引用列的值从插入的插入部分…UPDATE语句。换句话说,如果没有重复的关键字冲突,价值观(col_name)在更新条款是指可以插入col_name.this函数值,特别适用于多行插入的值()函数仅在插入有意义…UPDATE语句,并在其他时间返回null。
当您使用重复密钥更新时,延迟选项将被忽略。
上述问题的SQL语句是:
复制代码代码如下所示:
插入st_movie(ID,OrderBy)值(3,4),(4,5),(5)、(6、7),(8);