删除所有节点后,如何将节点ID重新设置为从1开始?


17

我生成了大量虚拟内容进行测试,然后将其全部删除。由于nid是自动递增的,因此新创建的节点将具有最后创建的nid +1的nid。

如何使nid从1重新开始?


6
问题是,为什么要这样做。使用什么nid并不重要,也不能保证它总是严格顺序的。
2011年

3
我同意贝尔迪尔的观点;任何模块都不应该依赖于第一个节点的ID等于1的事实。这类似于用户的用户ID:您可以依靠始终由Drupal创建的ID等于0且等于1的用户的存在。在安装过程中,但您不应依赖于ID等于3的用户帐户。其他模块可能会删除匿名用户或超级用户的帐户,但这应视为此类模块的错误。
kiamlaluno

Answers:


13

Plase不会像这样截断节点表,还有一些其他表连接到该节点表,例如node_revisions,sequences,fields表,taxonomy表等。

没有安全的方法来执行此操作,这实际上取决于您的站点,您必须截断和调整所有带有nid的表,包括sequences表。请记住,您的站点很有可能无法使用,因此不要先没有备份就开始。


1
我希望删除所有节点后,包含对节点的引用的其他表也应该为空。说,没有模块应该依赖这样的事实的第一个节点具有ID等于1
kiamlaluno

16
ALTER TABLE `node` AUTO_INCREMENT = 1;

PS-其他回答此问题的人:删除内容后我做了一小段检查,并且确实删除了相关的内容,node_revisions和field_ *表为空。node_delete说了同样的- http://api.drupal.org/api/drupal/modules--node--node.module/function/node_delete_multiple/7

从其他平台(例如ASP + MSSQL)进行迁移时,有时在迁移项目中,由于多种因素,有时不可避免地需要重置nid。我确信可以避免,但是时间/代码权衡始终存在。


我一直在经历一个耗时数月的大规模迁移项目。我一直用于开发和测试的站点在这里和那里添加了一些新节点,这些节点包含了一些最新内容。我认为您需要回滚所有节点和注释,并将两者都设置为AUTO_INCREMENT = 1。我想知道是否有人为迁移做过此事,尤其是对于Drupal 7?
Webdrips

2

SQL查询: ALTER TABLE 'node' AUTO_INCREMENT=1;

在执行此操作之前,请确保已删除所有节点。


2

您可以通过以下drush命令使用“ 全部删除 ”模块:

Drupal 7

删除所有类型的节点,然后重置节点,修订和注释计数器。

drush delete-all --reset

Drupal 8

看这里

删除所有类型的所有内容。

drush delete-all-delete-content

接着:

ALTER TABLE `node` AUTO_INCREMENT=1;
ALTER TABLE `node_revision` AUTO_INCREMENT=1;
ALTER TABLE `node_field_data` AUTO_INCREMENT=1;
ALTER TABLE `node_field_revision` AUTO_INCREMENT=1;

0

您可以截断节点表,但是要注意,您必须截断关系字段表,如果您只想从1开始递增ID,则可以使用

ALTER TABLE  `node` AUTO_INCREMENT=1

截断节点表将忽略应在删除节点时触发的所有挂钩,因此这不是一个明智的主意。例如,它将数据保留在修订表中,当Drupal碰到试图创建修订的已使用nid时,Drupal将崩溃。
莫沃特(Mołot)

@Mołot如果您截断节点和修订节点表,则没有任何问题。我对其进行了测试,没有遇到任何问题
shahab 2014年

在您的特定设置中此方法成功的事实并不能证明它将始终有效。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.