重复密钥更新时MySql插入 - 唯一

时间:2015-02-11 18:57:58

标签: mysql sql

我有以下表格定义:

create table mytable(
  a int,
  b int,
  c int,
  primary key (a, b),
  unique (b, c)
);

insert into mytable values (1,2,3);

select * from mytable;
    +---+---+------+
    | a | b | c    |
    +---+---+------+
    | 1 | 2 |    3 |
    +---+---+------+

以下陈述有一个令人惊讶的结果:

mysql> insert into mytable (a, b, c) values (2, 2, 3) on duplicate key update a = 2, b = 2, c = 3;
Query OK, 2 rows affected (0.00 sec)
mysql> select * from mytable;
+---+---+------+
| a | b | c    |
+---+---+------+
| 2 | 2 |    3 |
+---+---+------+
1 row in set (0.00 sec)

我期望插入/更新由于唯一约束而失败。当我处理主键(2,2)时,我当然不希望用主键(1,2)删除记录。

这是一个错误???

1 个答案:

答案 0 :(得分:0)

此行为已设计完成。您的值未删除,但已更新。这来自MySQL文档:

如果指定ON DUPLICATE KEY UPDATE,并且插入的行将导致UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行的UPDATE。例如,如果列a声明为UNIQUE并且包含值1,则以下两个语句具有相同的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;