首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密钥主项的密钥条目重复

密钥主项的密钥条目重复
EN

Stack Overflow用户
提问于 2014-08-01 23:01:35
回答 2查看 85关注 0票数 3

我是MySQL的新手,但学得很快。我正在遵循一个教程,一切都很好,直到我添加了几条记录。我在Workbench 6.1中做这个教程。

这是本教程要求我做的:

在使用emp_no、first_name和last_name创建一个非常简单的表之后,其中emp_no是PK,我们插入三条记录:

代码语言:javascript
复制
no  fn      ln
--------------------
1   Daniel  Lamarche
2   Paul    Smith
3   Bobz    Youruncle

然后,本教程要求我们将第三条记录更新为:

代码语言:javascript
复制
5   Alan    Youruncle

平安无事。然后,它要求我们确认LAST_INSERT_ID()仍然等于3。

该表现在如下所示:

代码语言:javascript
复制
no  fn      ln
--------------------
1   Daniel  Lamarche
2   Paul    Smith
5   Alan    Youruncle

在这里,我有一个问题,教程没有解决,因为它到此为止。虽然我喜欢冒险,但我想知道如果我添加三个记录会发生什么。由于LAST_INSERT_ID =3将emp_no取3,4,然后6,我问自己。

因此,当我使用以下命令插入三条记录时:

代码语言:javascript
复制
INSERT INTO employees (first_name, last_name)
VALUES ('Paul', 'Lalo'), ('Claude', 'Baker'), ('Alan', 'Brown');

我得到错误错误代码: 1062。键PRIMARY的条目“%5”重复。

现在我完全理解为什么会有错误了。任何人都可以帮助我理解如何处理这个问题。有没有办法插入新的记录并跳过它遇到的值?

现在我也明白了,这样做可能不是一种好的做法。但让我们假设这是一个真实的生活场景,而不仅仅是像我这样的初学者的有趣教程。

以防万一有人想去tut,请访问:http://www.mysqltutorial.org/mysql-sequence/

谢谢,丹尼尔

EN

回答 2

Stack Overflow用户

发布于 2014-08-01 23:10:31

在大多数实际情况中,您永远不会更新或插入auto_increment主键值,而只需要更新或插入其他列值。它只是作为行的指针存在。

当本教程要求您将第三条记录更新为:

代码语言:javascript
复制
5   Alan    Youruncle

它只是强调了有关LAST_INSERT_ID()行为的一点,但应该指出,这不是通常应该运行的更新。

如果您想完全更改一行,通常会先执行delete,然后执行insert。

如有必要,可以将表中的当前auto_increment值更改为大于当前最大值的值。然而,只有当你做了一些不寻常的事情时,这才是必要的:

代码语言:javascript
复制
ALTER TABLE employees AUTO_INCREMENT=6;
票数 2
EN

Stack Overflow用户

发布于 2014-08-01 23:18:56

基本上,当您执行INSERT时,MySQL将更新表的AUTO_INCREMENT。当您在“自动增量”列上执行更新时,MySQL不会更新表的AUTO_INCREMENT

因此,

INSERT INTO users(id, name) VALUES(20, 'John');会将AUTO_INCREMENT更新为21,以便下一次插入将具有第21个ID。

但是如果你执行一次UPDATE users SET id = 40 WHERE id = 20AUTO_INCREMENT仍然是21,而不是41,下一次插入将拥有第21个ID,如果你一直插入,最终你将再次命中第40个ID,这将引发一个重复的主键异常。

此外,FWIW、AUTO_INCREMENT更新是在插入之后计算和执行的,而不是在插入之前。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25083129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档