1

我是新手mysql,正在阅读关于duplicate key update. 我们一般写的语句是这样的

insert into table (col1,col2) values(1,1) on duplicate key update col2=1;

假设 col1 为primary.

我对这个语句的理解是,如果 col1 中有重复值,则相应的语句将 col2 更新为 1。我的问题是为什么我们key在这个语句中使用术语“”?据了解,该语句仅在存在primary key violation. 我们可以使用其他任何参数或函数duplicate吗?

谢谢

4

2 回答 2

2

如果存在键或唯一键违规,MySQL 会更新。该手册在单独的章节中通过示例对其进行了广泛的介绍:

如果您指定 ON DUPLICATE KEY UPDATE,并且插入的行会导致 UNIQUE 索引或 PRIMARY KEY 中的重复值,MySQL 将对旧行执行 UPDATE。

术语用作语法定义的一部分。该术语仅在执行语句时才可用INSERT。如果您通过任何其他方式插入数据(我现在只能想到LOAD DATA),其他机制就会到位。

于 2012-06-11T07:18:27.643 回答
1

此命令没有其他选项。另外我想说你可以用这种方式重写语句 -

INSERT INTO table (col1, col2) VALUES(1, 1) ON DUPLICATE KEY UPDATE col2 = VALUES(col2);

您也可以使用:

  • 带有 IGNORE 关键字的 INSERT 语句以忽略错误
  • 用唯一键替换记录的REPLACE语句。

换句话说,INSERT+ON DUPLICATE KEY UPDATE 就像一个语句中的 INSERT 和 REPLACE 一样工作。还有一件事 - INSERT+ON DUPLICATE KEY UPDATE 语句有很大的优势,它不会删除更新记录;REPLACE 语句删除然后插入新记录。

于 2012-06-11T07:19:20.690 回答