为什么在INSERT ... ON DUPLICATE KEY UPDATE上为MySQL中的键“ PRIMARY”给出重复的条目“ x”?

雅各布·李尔

我有一个表,我将从LDAP / AD导入成千上万个用户帐户,并希望它在发现重复的情况下更新它们,以防发生更改。我正在使用自动递增的替代键作为主键,并使用“域”和“用户名”作为唯一键索引。主键用作另一个表中的外键。此外,此表还包含“位置”表中的外键。

我已经做了很多阅读,尝试和错误尝试使MySQL INSERT ... ON DUPLICATE KEY UPDATE语法起作用,但没有成功。每次尝试,都会得到相同的结果(键增加):键“ PRIMARY”的条目“ 27305”重复。请注意,表中没有使用此键的条目。

我正在将MySQL 5.6.30与PHP 5.6.21结合使用。

这是表的结构:

-表的表结构 users

CREATE TABLE `users` (
`Userid` bigint(20) UNSIGNED NOT NULL,
`Domain` varchar(17) NOT NULL,
`Username` varchar(25) NOT NULL,
`Firstname` varchar(25) DEFAULT NULL,
`Lastname` varchar(35) DEFAULT NULL,
`Realname` varchar(60) DEFAULT NULL,
`Dept` varchar(10) DEFAULT NULL,
`Email` varchar(50) DEFAULT NULL,
`Site` varchar(3) DEFAULT NULL,
`Location` bigint(20) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `users`
ADD PRIMARY KEY (`Userid`),
ADD UNIQUE KEY `Domain` (`Domain`,`Username`) USING BTREE,
ADD KEY `Realname` (`Realname`,`Dept`) USING BTREE,
ADD KEY `Email` (`Email`),
ADD KEY `Location` (`Location`),
ADD KEY `Firstname` (`Firstname`,`Lastname`,`Dept`) USING BTREE,
ADD KEY `Firstname_2` (`Firstname`,`Lastname`,`Location`);

ALTER TABLE `users`
MODIFY `Userid` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
AUTO_INCREMENT=27306;

ALTER TABLE `users`
ADD CONSTRAINT `Location_fk` FOREIGN KEY (`Location`) REFERENCES `locations`  
(`Locid`) ON UPDATE CASCADE;

这是根据PHP的插入语句:

INSERT INTO `users` (`Domain`, `Username`, `Firstname`, `Lastname`,
`Realname`, `Dept`, `Email`, `Site`, `Location`) VALUES ('americas',
'JACLEAR', 'Foo', 'Bar', 'Foo Bar', 'IT', '[email protected]', '165', '0')
ON DUPLICATE KEY UPDATE `Userid`=LAST_INSERT_ID(`Userid`),
`Domain`=`Domain`, `Username`=`Username`, `Firstname`=VALUES(`Firstname`),
`Lastname`=VALUES(`Lastname`), `Realname`=VALUES(`Realname`),
`Dept`=VALUES(`Dept`), `Email`=VALUES(`Email`), `Site`=VALUES(`Site`),
`Location`=VALUES(`Location`);

同样,我尝试更改insert语句中的几处内容,但始终会产生相同的错误。我已经尝试过诸如从语句的更新部分中删除主键和唯一键,从唯一键中删除VALUES,从主键中删除LAST_INSERT_ID之类的事情。我尝试将语句直接粘贴到SQL控制台中,但是没有这样做。无法获得更多对输出有用的信息-它返回了相同的消息:密钥“ PRIMARY”的条目重复“ 27305”

由于在SQL Console上运行该语句会返回相同的错误,因此我认为它与PHP没有任何关系。我要提到的是我正在使用PDO-> prepare()和PDOStatement-> execute()。

看起来我将不得不执行SELECT,然后根据SELECT结果执行INSERT或UPDATE,除非有人看到我在做什么错。但这会使脚本的效率降低很多。

任何帮助,将不胜感激。谢谢。

雅各布·李尔

我试图在没有“ ON DUPLICATE KEY UPDATE”的情况下进行INSERT操作,并且MySQL响应了一个有用的错误,该错误实际上指出了REAL问题。它告诉我,我为外键(位置)插入的值是“违规”。之所以如此,是因为位置表中没有键0的记录。我将示例插入内容更新为使用有效的位置外键,并且该方法有效。更新成功。

简而言之,请确保您要插入有效值!;)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

INSERT INTO... ON DUPLICATE KEY UPDATE 不更新 PHP 和 mySQL 中的重复值

来自分类Dev

调整 INSERT ON DUPLICATE KEY UPDATE

来自分类Dev

php ON DUPLICATE KEY UPDATE 还说 1062: Duplicate entry for key 'PRIMARY'

来自分类Dev

INSERT ... ON DUPLICATE KEY UPDATE不起作用

来自分类Dev

MySql上的INSERT〜SELECT〜ON DUPLICATE KEY查询出了什么问题?

来自分类Dev

PHP MySQL INSERT ON DUPLICATE KEY UPDATE 不起作用

来自分类Dev

Java上的MySQL“ INSERT ... ON DUPLICATE KEY UPDATE”:如何区分插入/更新/ NoChange状态

来自分类Dev

将UPDATE转换为INSERT INTO ON DUPLICATE KEY UPDATE语句

来自分类Dev

INSERT INTO ... ON DUPLICATE KEY UPDATE似乎不起作用

来自分类Dev

MySQL-如何在批处理INSERT ON DUPLICATE KEY UPDATE查询中计算INSERT和UPDATES?

来自分类Dev

MySQL-如何在批处理INSERT ON DUPLICATE KEY UPDATE查询中计算INSERT和UPDATES?

来自分类Dev

MySQL具有多个唯一键的“ Insert ... On Duplicate Key”

来自分类Dev

MySQL 语句 ON DUPLICATE KEY 用于非键

来自分类Dev

ON DUPLICATE KEY UPDATE-如果if语句为true,则更新列,否则触发1062错误以捕获重复

来自分类Dev

ON DUPLICATE KEY UPDATE错误响应

来自分类Dev

MySQL-可以“ INSERT INTO-ON DUPLICATE KEY UPDATE”导致数据丢失

来自分类Dev

指定单个列时,MySQL批量INSERT .. ON DUPLICATE KEY UPDATE

来自分类Dev

MySQL-可以“ INSERT INTO-ON DUPLICATE KEY UPDATE”导致数据丢失

来自分类Dev

MySQL DUPLICATE KEY UPDATE + SUM函数

来自分类Dev

MySQL UPDATE ON DUPLICATE KEY仅插入

来自分类Dev

ON DUPLICATE KEY UPDATE 콜백-MySQL

来自分类Dev

ON DUPLICATE KEY UPDATE回调-MySQL

来自分类Dev

python mysql DUPLICATE KEY UPDATE rrror

来自分类Dev

INSERT SELECT,键“ PRIMARY”的条目“ 0”重复,而没有覆盖其他表

来自分类Dev

INSERT SELECT,键“ PRIMARY”的条目“ 0”重复,而没有覆盖其他表

来自分类Dev

在“ INSERT ON DUPLICATE KEY UPDATE”中,检测在指定插入值时是否使用默认值

来自分类Dev

SQLSTATE [23000]:违反完整性约束:1062键“ PRIMARY”的条目“ 0”重复,查询为:INSERT INTO`log_visitor`

来自分类Dev

在SQLITE Android中模拟DUPLICATE KEY UPDATE

来自分类Dev

在Zend中查询“ ON DUPLICATE KEY UPDATE”

Related 相关文章

  1. 1

    INSERT INTO... ON DUPLICATE KEY UPDATE 不更新 PHP 和 mySQL 中的重复值

  2. 2

    调整 INSERT ON DUPLICATE KEY UPDATE

  3. 3

    php ON DUPLICATE KEY UPDATE 还说 1062: Duplicate entry for key 'PRIMARY'

  4. 4

    INSERT ... ON DUPLICATE KEY UPDATE不起作用

  5. 5

    MySql上的INSERT〜SELECT〜ON DUPLICATE KEY查询出了什么问题?

  6. 6

    PHP MySQL INSERT ON DUPLICATE KEY UPDATE 不起作用

  7. 7

    Java上的MySQL“ INSERT ... ON DUPLICATE KEY UPDATE”:如何区分插入/更新/ NoChange状态

  8. 8

    将UPDATE转换为INSERT INTO ON DUPLICATE KEY UPDATE语句

  9. 9

    INSERT INTO ... ON DUPLICATE KEY UPDATE似乎不起作用

  10. 10

    MySQL-如何在批处理INSERT ON DUPLICATE KEY UPDATE查询中计算INSERT和UPDATES?

  11. 11

    MySQL-如何在批处理INSERT ON DUPLICATE KEY UPDATE查询中计算INSERT和UPDATES?

  12. 12

    MySQL具有多个唯一键的“ Insert ... On Duplicate Key”

  13. 13

    MySQL 语句 ON DUPLICATE KEY 用于非键

  14. 14

    ON DUPLICATE KEY UPDATE-如果if语句为true,则更新列,否则触发1062错误以捕获重复

  15. 15

    ON DUPLICATE KEY UPDATE错误响应

  16. 16

    MySQL-可以“ INSERT INTO-ON DUPLICATE KEY UPDATE”导致数据丢失

  17. 17

    指定单个列时,MySQL批量INSERT .. ON DUPLICATE KEY UPDATE

  18. 18

    MySQL-可以“ INSERT INTO-ON DUPLICATE KEY UPDATE”导致数据丢失

  19. 19

    MySQL DUPLICATE KEY UPDATE + SUM函数

  20. 20

    MySQL UPDATE ON DUPLICATE KEY仅插入

  21. 21

    ON DUPLICATE KEY UPDATE 콜백-MySQL

  22. 22

    ON DUPLICATE KEY UPDATE回调-MySQL

  23. 23

    python mysql DUPLICATE KEY UPDATE rrror

  24. 24

    INSERT SELECT,键“ PRIMARY”的条目“ 0”重复,而没有覆盖其他表

  25. 25

    INSERT SELECT,键“ PRIMARY”的条目“ 0”重复,而没有覆盖其他表

  26. 26

    在“ INSERT ON DUPLICATE KEY UPDATE”中,检测在指定插入值时是否使用默认值

  27. 27

    SQLSTATE [23000]:违反完整性约束:1062键“ PRIMARY”的条目“ 0”重复,查询为:INSERT INTO`log_visitor`

  28. 28

    在SQLITE Android中模拟DUPLICATE KEY UPDATE

  29. 29

    在Zend中查询“ ON DUPLICATE KEY UPDATE”

热门标签

归档