Wie setze ich nach dem Löschen aller Knoten die Knoten-ID zurück, um wieder bei 1 zu beginnen?

17

Ich habe Tonnen von Dummy-Inhalten zum Testen generiert und sie dann alle gelöscht. Da nid automatisch inkrementiert wird, weist der neu erstellte Knoten eine nid von nid +1 auf, die zuletzt erstellt wurde.

Wie kann ich nid wieder von 1 anfangen lassen?

Gilzero
quelle
6
Die Frage ist, warum sollte ich das tun wollen. Es spielt keine Rolle, welches nid verwendet wird, und es gibt keine Garantie dafür, dass es sowieso immer streng sequentiell ist.
Berdir
3
Ich stimme Berdir zu. Kein Modul sollte sich darauf verlassen können, dass der erste Knoten eine ID von 1 hat. Dies entspricht der Benutzer-ID der Benutzer: Sie können sich darauf verlassen, dass ein Benutzer mit einer ID von 0 und 1 vorhanden ist, die immer von Drupal erstellt werden Während der Installation sollten Sie sich jedoch nicht auf das Vorhandensein eines Benutzerkontos mit der ID 3 verlassen. Andere Module könnten das Konto des anonymen Benutzers oder des Superbenutzers löschen, dies sollte jedoch als Fehler solcher Module angesehen werden.
kiamlaluno

Antworten:

13

Bitte kürzen Sie die Knotentabelle nicht einfach so, da einige andere Tabellen mit der Knotentabelle verbunden sind, z. B. node_revisions, sequence, fields tables, taxonomy tables und viele mehr.

Es gibt keine sichere Möglichkeit, dies zu tun. Es hängt wirklich von Ihrer Site ab. Sie müssen alle Tabellen mit einer NID abschneiden und anpassen, einschließlich der Sequenztabelle. Denken Sie daran, es ist sehr wahrscheinlich, dass Ihre Site unbrauchbar wird. Beginnen Sie also nicht ohne vorherige Sicherung.

Luis
quelle
1
Ich würde erwarten, dass andere Tabellen, die Verweise auf Knoten enthalten, auch leer sein sollten, wenn alle Knoten gelöscht werden. Gesagt, kein Modul sollte sich auf die Tatsache verlassen, dass der erste Knoten eine ID von 1 hat.
kiamlaluno
16
ALTER TABLE `node` AUTO_INCREMENT = 1;

PS - Andere, die auf diese Frage geantwortet haben: Ich habe gerade eine kleine Überprüfung durchgeführt, nachdem der Inhalt gelöscht wurde und der zugehörige Inhalt tatsächlich gelöscht wurde. Node_revisions und field_ * -Tabellen sind leer. node_delete sagt dasselbe - http://api.drupal.org/api/drupal/modules--node--node.module/function/node_delete_multiple/7

Manchmal ist es bei Migrationsprojekten, wenn Sie von anderen Plattformen (z. B. ASP + MSSQL) migrieren, aufgrund vieler Faktoren unvermeidlich, die nid zurückzusetzen. Ich bin sicher, es könnte vermieden werden, aber der Zeit- / Code-Kompromiss ist immer da.

Dipen
quelle
Ich habe ein umfangreiches Migrationsprojekt durchlaufen, das Monate gedauert hat. Der Site, die ich für die Entwicklung und das Testen verwendet habe, wurden hier und da einige neue Knoten hinzugefügt, die einige der neueren Inhalte hervorheben. Ich denke, Sie müssen alle Knoten und Kommentare zurücksetzen und AUTO_INCREMENT = 1 für beide festlegen. Ich frage mich, ob jemand, der dies für Migrationen getan hat, auf andere Probleme gestoßen ist, insbesondere für Drupal 7?
Webdrips
2

SQL-Abfrage: ALTER TABLE 'node' AUTO_INCREMENT=1;

Stellen Sie sicher, dass Sie alle Knoten gelöscht haben, bevor Sie dies tun.

Beeleg
quelle
2

Sie können das Modul Alle löschen mit folgenden Befehlen verwenden:

Drupal 7

Löschen Sie Knoten aller Art und setzen Sie die Zähler für Knoten, Überarbeitungen und Kommentare zurück.

drush delete-all --reset

Drupal 8

siehe hier

Löscht den gesamten Inhalt aller Typen.

drush delete-all-delete-content

Und dann:

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;
schneidolf
quelle
0

Sie können die Knotentabelle abschneiden, aber beachten Sie, dass Sie die relationale Feldtabelle abschneiden müssen, wenn Sie nur die Inkrementierungs-ID von 1 beginnen möchten, die Sie verwenden können

ALTER TABLE  `node` AUTO_INCREMENT=1
Shahab
quelle
Wenn Sie die Knotentabelle abschneiden, werden alle Hooks ignoriert, die beim Löschen des Knotens ausgelöst werden sollen. Daher ist dies keine gute Idee. Beispielsweise werden Daten in der Revisionstabelle belassen, und Drupal stürzt ab, wenn es das bereits verwendete NID trifft, das versucht, eine Revision zu erstellen.
Mołot
@ Mołot Wenn Sie Knoten und Revisionsknotentabelle abschneiden, haben Sie kein Problem. Ich
teste
Die Tatsache, dass diese Methode in Ihrem speziellen Setup erfolgreich war, beweist nicht, dass sie immer funktioniert.
Mołot