MySQL错误代码:1062。密钥'nombre_UNIQUE'重复输入'0'

时间:2018-03-20 15:07:19

标签: mysql sql

我正在尝试创建一个SQL查询来插入和更新从一个表到另一个表的行,这些表分别是tmpTesttesttest上的某些列设置为UNIQUE,因此当tmpTest中的一个传入行在该列上具有相同的值时,它应该更新而不是插入。

我的查询:

INSERT INTO `test` ( name,lastName,age ) 
SELECT tmp.name,tmp.lastName,tmp.age FROM `tmpTest` tmp 
ON DUPLICATE KEY UPDATE test.name = tmp.name AND test.lastName = tmp.lastName AND test.age = tmp.age ;

其中name是'UNIQUE'列。

案例1:

`tmpTest`:
name   lastName  age
Dulcie Sheree    43
Elvin  Wes       21

`test`:
id name    lastName  age
1  Dulcie  Lilibeth  34
2  Sophia  Dora      67
4  Jillian Britton   21

resulting `test`:
id name    lastName  age
1  0       Lilibeth  34
2  Sophia  Dora      67
4  Jillian Britton   21
10 Elvin   Wes       21

第一行未更新,并使用“0”更改了名称字段。插入第二行。

案例2:

`tmpTest`:
name   lastName  age
Dulcie Sheree    43
Elvin  Wes       21

`test`:
id name    lastName  age
1  Dulcie  Lilibeth  34
2  Sophia  Dora      67
4  Jillian Britton   21
10 Elvin   Wes       21

我得到的错误:

Error Code: 1062. Duplicate entry '0' for key 'name_UNIQUE'

有什么建议吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

这里的问题是你的UPDATE语句中的一系列AND,这些应该是逗号','

我猜MySQL正在评估表达式

'Dulcie' = 'Dulcie' AND 'Sheree' = 'Lilibeth' AND 43 = 34

当这些值中的任何一个与其配对不匹配时获得0。

e.g。

mysql> SELECT 'Dulcie' = 'Dulcie' AND 'Sheree' = 'Lilibeth' AND 43 = 34;
+-----------------------------------------------------------+
| 'Dulcie' = 'Dulcie' AND 'Sheree' = 'Lilibeth' AND 43 = 34 |
+-----------------------------------------------------------+
|                                                         0 |
+-----------------------------------------------------------+
1 row in set (0.00 sec)

我在这里“猜测”,因为我得到了

"Error Data truncation: Truncated incorrect DOUBLE value: 'Dulcie'" 

当我尝试运行您的代码时,我无法复制您的结果。

再次运行时,您将已经将0作为值,这将导致test上的UNIQUE约束失败。

用逗号代替AND,你将得到你在

之后的结果

http://sqlfiddle.com/#!9/26d8d2/1