หลังจากลบโหนดทั้งหมดฉันจะรีเซ็ต ID โหนดให้เริ่มต้นจาก 1 อีกครั้งได้อย่างไร


17

ฉันสร้างเนื้อหาจำลองเพื่อการทดสอบแล้วลบออกทั้งหมด เนื่องจาก nid เป็นการเพิ่มอัตโนมัติโหนดที่สร้างขึ้นใหม่จะมีหมายเลขของ nid ที่สร้างขึ้นล่าสุด +1

ฉันจะทำให้ nid เริ่มต้นจาก 1 อีกครั้งได้อย่างไร


6
คำถามคือทำไมอยากทำเช่นนั้น มันไม่สำคัญว่าจะใช้ nid อะไรและไม่มีการรับประกันว่ามันจะเรียงตามลำดับอย่างเคร่งครัดเสมอ
Berdir

3
ฉันเห็นด้วยกับ Berdir; ไม่ควรใช้โมดูลขึ้นอยู่กับความจริงที่โหนดแรกมี ID เท่ากับ 1 ซึ่งคล้ายกับ ID ผู้ใช้ของผู้ใช้: คุณสามารถพึ่งพาการมีอยู่ของผู้ใช้ที่มี ID เท่ากับ 0 และ 1 ซึ่งสร้างขึ้นจาก Drupal เสมอ ระหว่างการติดตั้ง แต่คุณไม่ควรพึ่งพาการแสดงตนของบัญชีผู้ใช้ที่มี ID เท่ากับ 3 โมดูลอื่น ๆ สามารถลบบัญชีของผู้ใช้ที่ไม่ระบุชื่อหรือผู้ใช้ขั้นสูง แต่ควรถือว่าเป็นข้อบกพร่องของโมดูลดังกล่าว
kiamlaluno

คำตอบ:


13

โปรดอย่าตัดทอนตารางโหนดแบบนั้นอย่างนั้นมีบางตารางอื่น ๆ ที่เชื่อมต่อกับตารางโหนดเช่น node_revisions, ลำดับ, ตารางเขตข้อมูล, ตาราง taxonomy และอื่น ๆ อีกมากมาย

ไม่มีวิธีที่ปลอดภัยในการทำเช่นนี้ขึ้นอยู่กับไซต์ของคุณคุณจะต้องตัดทอนและปรับตารางทั้งหมดที่มี nid รวมถึงตารางลำดับ โปรดจำไว้ว่ามีความเป็นไปได้สูงมากที่เว็บไซต์ของคุณจะไม่สามารถใช้งานได้ดังนั้นอย่าเริ่มต้นโดยไม่มีการสำรองข้อมูลก่อน


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 คุณสามารถใช้

ALTER TABLE  `node` AUTO_INCREMENT=1

การตัดทอนตารางโหนดจะไม่สนใจ hooks ทั้งหมดที่ควรเริ่มจากการลบโหนดดังนั้นจึงไม่ใช่ความคิดที่ฉลาด ตัวอย่างเช่นมันจะเก็บข้อมูลไว้ในตารางการแก้ไขและ Drupal จะหยุดทำงานเมื่อมันจะเข้าสู่ nid ที่ใช้ไปแล้วพยายามที่จะสร้างการแก้ไข
Mołot

@ Mołotหากคุณตัดปลายโหนดและแก้ไขตารางโหนดคุณจะไม่มีปัญหาใด ๆ ฉันทดสอบและไม่มีปัญหา
ชาฮาบ

ความจริงที่ว่าในการตั้งค่าเฉพาะของคุณวิธีนี้ประสบความสำเร็จไม่ได้พิสูจน์ว่ามันจะทำงานได้เสมอ
Mołot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.