Як видалити всі вузли, як мені скинути ідентифікатор вузла, щоб знову почати з 1?


17

Я сформував тонни фіктивного вмісту для тестування, а потім видалив їх усіх. Оскільки nid є автоматичним збільшенням, новостворений вузол матиме nid останнього створеного nid +1.

Як я можу змусити nid почати з 1 знову?


6
Питання в тому, чому б хотіли це робити. Насправді не має значення, який нід використовується, і немає гарантії, що він завжди суворо послідовний.
Бердір

3
Я згоден з Бердіром; жоден модуль не повинен покладатися на той факт, що перший вузол має ідентифікатор, рівний 1. Це аналогічно ідентифікатору користувача користувачів: ви можете розраховувати на наявність користувача з ідентифікатором, рівним 0 і 1, який завжди створюється з Drupal під час встановлення, але не слід покладатися на наявність облікового запису користувача з ідентифікатором, рівним 3. Інші модулі можуть видалити обліковий запис анонімного користувача або надкористувача, але це слід вважати помилкою таких модулів.
kiamlaluno

Відповіді:


13

Plase не обрізає таблицю вузлів просто так, є деякі інші таблиці, підключені до таблиці вузлів, такі як node_reitions, послідовності, таблиці полів, таблиці таксономії та багато іншого.

Немає безпечного способу зробити це, це дійсно залежить від вашого веб-сайту, вам доведеться усікати та коригувати всі таблиці, які містять nid, включаючи таблицю послідовностей. Пам'ятайте, велика ймовірність того, що ваш сайт стане непридатним, тому не починайте спочатку без резервної копії.


1
Я б очікував, що і інші таблиці, що містять посилання на вузли, також повинні бути порожніми, коли всі вузли будуть видалені. Сказав, що жоден модуль не повинен розраховувати на те, що перший вузол має ідентифікатор, рівний 1.
kiamlaluno

16
ALTER TABLE `node` AUTO_INCREMENT = 1;

PS - Інші, хто відповів на це запитання: я лише зробив невелику перевірку після видалення вмісту, і пов’язаний з ним вміст справді видалено, таблиці node_reitions і field_ * порожні. node_delete говорить те саме - http://api.drupal.org/api/drupal/modules--node--node.module/function/node_delete_multiple/7

Іноді для міграційних проектів, коли ви мігруєте з інших платформ (наприклад, ASP + MSSQL), іноді стає неминучим скинути нуд через велику кількість факторів. Я впевнений, що цього можна уникнути, але компроміс часу / коду завжди є.


Я переживав масштабний міграційний проект, який займає місяці. На сайті, який я використовую для розробки та тестування, тут і там додано нові вузли, які містять частину більш недавнього вмісту. Я думаю, вам потрібно скасувати всі вузли та коментарі та встановити AUTO_INCREMENT = 1 для обох. Мені цікаво, чи хтось, хто зробив це для міграцій, натрапив на якісь інші проблеми, особливо для Drupal 7?
Webdrips

2

SQL-запит: ALTER TABLE 'node' AUTO_INCREMENT=1;

Переконайтеся, що ви видалили всі вузли, перш ніж це зробити.


2

Ви можете скористатися модулем Видалити все за допомогою наступних команд:

Drupal 7

Видаліть вузли всіх типів та скиньте вузол, лічильник перегляду та коментарів.

drush delete-all --reset

Друпал 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, Ви можете використовувати

ALTER TABLE  `node` AUTO_INCREMENT=1

Таблиця вузлів обрізання ігнорує всі гачки, які повинні спрацьовувати при видаленні вузла, тому це не розумна ідея. Наприклад, він залишить дані в таблиці ревізій, а Drupal вийде з ладу, коли він потрапить на вже використаний nid, що намагається створити версію.
Молот

@ Mołot, якщо обрізати таблицю вузла та переглядати таблицю вузлів, у вас немає проблем. Я тестую це і не маю проблем
shahab

Те, що у ваших конкретних налаштуваннях цей метод досяг успіху, не доводить, що він завжди працюватиме.
Молот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.