MySQL 错误代码 : 1062. 键 '0' 的重复条目 'nombre_UNIQUE'

标签 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' 列。

案例一:

`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”。插入第二行。

案例二:

`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'

有什么建议吗? 谢谢!

最佳答案

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

我猜 MySQL 正在计算表达式

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

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

例如

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

关于MySQL 错误代码 : 1062. 键 '0' 的重复条目 'nombre_UNIQUE',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49387767/

相关文章:

mysql regex inverse(仅供 REGEXP 使用)

mysql - 条件中找不到列错误

mysql - 如何一次打印多个查询,生成 1 个表?

sql - 如何在 T-SQL 中编写一个函数,该函数接受表作为输入并将结果作为表返回?

MySQL case 新建一个专栏

mysql - 使用group by子查询优化sql

php - 如何在 mysql 中使用带有 OR 子句的 'INSERT INTO IGNORE' 或 'NOT EXISTS'

mysql - 谁能告诉我为什么这个查询需要很长时间才能运行?

sql - 使用单独的日期和时间字段查询最近的记录

mysql - 搜索区间 "cross"行