我是 MySQL 的新手,但学得很快。我正在学习教程,一切都很好,直到我添加了几条记录。我在 Workbench 6.1 中完成本教程。
这是教程要求我做的:
在使用 emp_no、first_name 和 last_name 创建一个非常简单的表之后,其中 emp_no 是 PK,我们插入三个记录:
no fn ln
--------------------
1 Daniel Lamarche
2 Paul Smith
3 Bobz Youruncle
然后教程要求我们将第三条记录更新为:
5 Alan Youruncle
一切顺利。然后它要求我们确认 LAST_INSERT_ID() 仍然等于 3。
表格现在如下所示:
no fn ln
--------------------
1 Daniel Lamarche
2 Paul Smith
5 Alan Youruncle
这里我遇到了教程没有解决的问题,因为它停在那里。喜欢冒险的我想知道如果我添加三个记录会发生什么。由于 LAST_INSERT_ID = 3,emp_no 将取 3、4 然后 6 我问自己。
所以当我插入三个记录时:
INSERT INTO employees (first_name, last_name)
VALUES ('Paul', 'Lalo'), ('Claude', 'Baker'), ('Alan', 'Brown');
我收到错误错误代码:1062。 key PRIMARY 的重复条目“5”。
现在我完全明白为什么会出现错误。任何人都可以帮助我了解如何处理这个问题。有没有办法插入新记录并跳过它遇到的值?
现在我也明白,以这种方式或其他方式做这件事可能不是好的做法。但让我们假装这是一个真实的生活场景,而不仅仅是像我这样的初学者的有趣教程。
以防万一有人想看图:http://www.mysqltutorial.org/mysql-sequence/
谢谢, 丹尼尔
最佳答案
在大多数现实生活中,您永远不会更新或插入 auto_increment 主键值,您只会更新或插入其他列值。它仅作为指向该行的指针存在。
当教程要求您将第三条记录更新为:
5 Alan Youruncle
它只是强调关于 LAST_INSERT_ID() 行为的一点,但应该指出这不是您通常应该运行的更新。
如果你想完全改变一行,你通常会先删除再插入。
如果必须,您可以将表上的当前 auto_increment 值更改为比当前最大值高的值。但是,只有在您做了一些不寻常的事情时才需要这样做:
ALTER TABLE employees AUTO_INCREMENT=6;
关于mysql - 键 PRIMARY 的重复键输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25083129/