我是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。键PRIMARY的条目“%5”重复。
现在我完全理解为什么会有错误了。任何人都可以帮助我理解如何处理这个问题。有没有办法插入新的记录并跳过它遇到的值?
现在我也明白了,这样做可能不是一种好的做法。但让我们假设这是一个真实的生活场景,而不仅仅是像我这样的初学者的有趣教程。
以防万一有人想去tut,请访问:http://www.mysqltutorial.org/mysql-sequence/
谢谢,丹尼尔
发布于 2014-08-01 23:10:31
在大多数实际情况中,您永远不会更新或插入auto_increment主键值,而只需要更新或插入其他列值。它只是作为行的指针存在。
当本教程要求您将第三条记录更新为:
5 Alan Youruncle它只是强调了有关LAST_INSERT_ID()行为的一点,但应该指出,这不是通常应该运行的更新。
如果您想完全更改一行,通常会先执行delete,然后执行insert。
如有必要,可以将表中的当前auto_increment值更改为大于当前最大值的值。然而,只有当你做了一些不寻常的事情时,这才是必要的:
ALTER TABLE employees AUTO_INCREMENT=6;发布于 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 = 20,AUTO_INCREMENT仍然是21,而不是41,下一次插入将拥有第21个ID,如果你一直插入,最终你将再次命中第40个ID,这将引发一个重复的主键异常。
此外,FWIW、AUTO_INCREMENT更新是在插入之后计算和执行的,而不是在插入之前。
https://stackoverflow.com/questions/25083129
复制相似问题