Sau khi xóa tất cả các nút, làm cách nào để đặt lại ID nút để bắt đầu lại từ 1?


17

Tôi đã tạo ra hàng tấn nội dung giả để thử nghiệm, và sau đó xóa tất cả. Vì nid là tự động tăng, nút mới được tạo sẽ có nid +1 được tạo cuối cùng.

Làm thế nào tôi có thể làm cho nid bắt đầu lại từ 1?


6
Câu hỏi là, tại sao lại muốn làm điều đó. Nó không thực sự quan trọng những gì nid được sử dụng, và không có gì đảm bảo rằng nó luôn luôn được tuần tự nghiêm ngặt.
Berdir

3
Tôi đồng ý với Berdir; không có mô-đun nào dựa vào thực tế nút đầu tiên có ID bằng 1. Điều này tương tự với ID người dùng của người dùng: bạn có thể dựa vào sự hiện diện của người dùng có ID bằng 0 và 1, luôn được tạo từ Drupal trong quá trình cài đặt, nhưng bạn không nên dựa vào sự hiện diện của tài khoản người dùng có ID bằng 3. Các mô-đun khác có thể xóa tài khoản của người dùng ẩn danh hoặc siêu người dùng, nhưng điều đó nên được coi là lỗi của các mô-đun đó.
kiamlaluno

Câu trả lời:


13

Plase không cắt bớt bảng nút như vậy, có một số bảng khác được kết nối với bảng nút, như nút numvutions, trình tự, bảng trường, bảng phân loại và nhiều bảng khác.

Không có cách nào an toàn để làm điều này, nó thực sự phụ thuộc vào trang web của bạn, bạn sẽ phải cắt bớt và điều chỉnh tất cả các bảng có nid bao gồm bảng tuần tự. Hãy nhớ rằng, rất có thể trang web của bạn trở nên không sử dụng được, vì vậy đừng bắt đầu mà không có bản sao lưu trước.


1
Tôi hy vọng rằng các bảng khác có chứa các tham chiếu đến các nút cũng sẽ trống, khi tất cả các nút bị xóa. Nói rằng, không có mô-đun nào nên dựa vào thực tế là nút đầu tiên có ID bằng 1.
kiamlaluno

16
ALTER TABLE `node` AUTO_INCREMENT = 1;

PS - Những người khác đã trả lời về câu hỏi này: Tôi vừa thực hiện một kiểm tra nhỏ sau khi xóa nội dung và nội dung liên quan thực sự bị xóa, các bảng node numvutions và field_ * trống. node_delete cũng nói như vậy - http://api.drupal.org/api/drupal/modules--node--node.module/feft/node_delete_mult Môn / 7

Đôi khi, trên các dự án di chuyển khi bạn di chuyển từ các nền tảng khác (ví dụ: ASP + MSSQL), đôi khi việc đặt lại nid là không thể tránh khỏi do nhiều yếu tố. Tôi chắc chắn rằng nó có thể tránh được nhưng sự đánh đổi thời gian / mã luôn ở đó.


Tôi đã trải qua một dự án di cư lớn đang mất nhiều tháng. Trang web tôi đang sử dụng để phát triển và thử nghiệm đã có một số nút mới được thêm vào đây và ở đó, trong đó có một số nội dung gần đây. Tôi nghĩ rằng bạn cần phải khôi phục tất cả các nút và nhận xét và đặt AUTO_INCREMENT = 1 cho cả hai. Tôi tự hỏi liệu có ai đã làm điều này cho việc di chuyển đã gặp phải bất kỳ vấn đề nào khác, đặc biệt là đối với Drupal 7 không?
Webdrips

2

Truy vấn SQL: ALTER TABLE 'node' AUTO_INCREMENT=1;

Hãy chắc chắn rằng bạn đã xóa tất cả các nút trước khi làm điều này.


2

Bạn có thể sử dụng mô-đun Xóa tất cả bằng các lệnh drush sau:

Drupal 7

Xóa các nút của tất cả các loại, và đặt lại nút, sửa đổi và bình luận quầy.

drush delete-all --reset

Drupal 8

xem ở đây

Xóa tất cả nội dung của tất cả các loại.

drush delete-all-delete-content

Và sau đó:

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

bạn có thể cắt bớt bảng nút nhưng, chú ý bạn phải cắt bớt bảng trường quan hệ, nếu bạn chỉ muốn bắt đầu tăng id từ 1, bạn có thể sử dụng

ALTER TABLE  `node` AUTO_INCREMENT=1

Cắt nút bảng sẽ bỏ qua tất cả các hook sẽ bắn vào nút xóa, vì vậy đó không phải là một ý tưởng khôn ngoan. Ví dụ, nó sẽ để lại dữ liệu trong bảng sửa đổi và Drupal sẽ gặp sự cố khi nó chạm vào nid đã sử dụng đang cố gắng tạo bản sửa đổi.
Mołot

@ Mołot nếu bạn cắt bớt nút và bảng nút sửa đổi, bạn không gặp vấn đề gì. Tôi kiểm tra nó và không có vấn đề gì
shahab

Thực tế là trong thiết lập cụ thể của bạn, phương pháp này đã thành công không chứng minh rằng nó sẽ luôn hoạt động.
Mołot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.