MySQL “INSERT IGNORE” 和 “INSERT … ON DUPLICATE KEY UPDATE”的区别
MySQL中的INSERT语句是向表中插入数据的操作,但当插入行时发生冲突(例如插入的行已经存在),则默认情况下MySQL将会抛出错误。为了更好地处理冲突,在INSERT语句中有两种不同的解决冲突的方式:INSERT IGNORE和INSERT … ON DUPLICATE KEY UPDATE。
阅读更多:MySQL 教程
INSERT IGNORE
INSERT IGNORE在遇到冲突的情况下,会忽略冲突并继续插入下一行。例如,下面的SQL语句会将John和Tom插入到students表中。
但是如果我们已经有一个名叫John的行
那么当我们尝试插入重复的John行时,MySQL将会返回一个错误。但是如果我们使用INSERT IGNORE语句,那么MySQL将会忽略这个错误并继续插入Tom的行。
上述SQL语句将插入名为Tom的行,而忽略名为John的行。
INSERT … ON DUPLICATE KEY UPDATE
INSERT … ON DUPLICATE KEY UPDATE会在遇到冲突的情况下更新现有的行。例如,下面的SQL语句会将John的分数更新为90。
但是如果我们想要插入一个新的行,而不是仅仅更新已有的行,该怎么办呢?我们可以将查询作为子查询,并使用INSERT INTO语句将其结果插入到students表中:
上述SQL语句会将名为Mike的行插入到students表中,但仅当该行不存在时。如果该行已经存在,则不执行任何操作。
总结
INSERT IGNORE和INSERT … ON DUPLICATE KEY UPDATE都可以用于在MySQL中处理插入时的冲突。如果我们想忽略冲突并继续插入下一行,可以使用INSERT IGNORE。如果我们想更新现有的行或插入新的行,可以使用INSERT … ON DUPLICATE KEY UPDATE。这两种方式都是非常有用的,取决于你的需求和应用场景。