แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่าง DELETE และ TRUNCATE ใน SQL

DELETE และ TRUNCATE เป็นคำสั่งที่ใช้เพื่อลบสิ่งอันดับออกจากความสัมพันธ์ แต่จะแตกต่างกันในบริบทจำนวนมาก ใน SQL คำสั่ง DELETE คือคำสั่ง Data Manipulation Language ในขณะที่คำสั่ง TRUNCATE คือคำสั่ง Data Definition Language อย่างไรก็ตามจุดที่ทำให้เราสามารถแยกความแตกต่างระหว่าง DELETE และ TRUNCATE ก็คือ DELETE สามารถลบ tuples ที่ระบุออกจากความสัมพันธ์ได้ในขณะที่คำสั่ง TRUNCATE จะลบ tuples ทั้งหมดจากความสัมพันธ์

เราไม่ควรหยุดที่นี่มีความแตกต่างอื่น ๆ อีกมากมายระหว่าง DELETE และ TRUNCATE ให้เราคุยกับพวกเขาด้วยความช่วยเหลือของกราฟเปรียบเทียบที่แสดงด้านล่าง

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบลบตัด
ขั้นพื้นฐานคุณสามารถระบุ tuple ที่คุณต้องการลบมันจะลบสิ่งอันดับทั้งหมดออกจากความสัมพันธ์
ภาษาDELETE เป็นคำสั่ง Data Manipulation LanguageTRUNCATE เป็นคำสั่ง Data Definition Language
WHEREคำสั่ง DELETE สามารถมี WHERE clause ได้คำสั่ง TRUNCATE ไม่มีส่วนคำสั่ง WHERE
ไกคำสั่ง DELETE จะเปิดใช้งานทริกเกอร์ที่ใช้บนโต๊ะและทำให้มันเริ่มทำงานคำสั่ง TRUNCATE ไม่เปิดใช้งานทริกเกอร์เพื่อเริ่มทำงาน
การลบคำสั่ง DELETE กำจัด tuples ทีละตัวTRUNCATE ลบหน้าข้อมูลทั้งหมดที่มีสิ่งอันดับ
ล็อคคำสั่ง DELETE ล็อคแถว / ทูเปิลก่อนที่จะลบตัดคำสั่ง TRUNCATE หน้าข้อมูลก่อนที่จะลบข้อมูลตาราง
ความเร็วคำสั่ง DELETE ทำงานช้าลงเมื่อเปรียบเทียบกับ TRUNCATETRUNCATE นั้นเร็วกว่าเมื่อเปรียบเทียบกับ DELETE
การซื้อขายDELETE บันทึกรายการธุรกรรมสำหรับแต่ละ tuple ที่ถูกลบตัดทอนบันทึกธุรกรรมสำหรับแต่ละหน้าข้อมูลที่ถูกลบ
ฟื้นฟูคำสั่ง DELETE สามารถตามด้วย COMMIT หรือ ROLLBACKคำสั่ง TRUNCATE ไม่สามารถย้อนกลับได้

คำจำกัดความของ DELETE

DELETE เป็นคำสั่ง Data Manipulation Language (DML) ภารกิจของคำสั่ง DELETE คือการลบหรือลบสิ่งอันดับจากตารางหรือความสัมพันธ์ ด้วยการใช้ DELETE เราสามารถกำจัด tuple ทั้งหมดด้วยค่าคุณลักษณะทั้งหมดจากความสัมพันธ์ DELETE ไม่ได้ลบค่าของแอตทริบิวต์เฉพาะของ tuple จากความสัมพันธ์

คุณสามารถกรองสิ่งอันดับที่คุณต้องการลบออกจากตารางโดยใช้ WHERE clause หากคุณ ระบุ WHERE clause ในคำสั่ง DELETE มันจะลบเฉพาะ tuples ที่เป็นไปตามเงื่อนไข WHERE clause เท่านั้น แต่ถ้าคุณ ไม่ได้ระบุ WHERE clause ในคำสั่ง DELETE ดังนั้นโดยค่าเริ่มต้นมันจะลบหรือกำจัด tuples ทั้งหมดออกจากความสัมพันธ์ WHERE clause ในคำสั่ง DELETE สามารถมีคำสั่ง SELECT-FROM-WHERE ซ้อนกัน

ไวยากรณ์ของคำสั่ง DELETE มีดังนี้:

ลบจาก table_name WHERE [ conditon ];

คำสั่ง DELETE ทำงานบน ความสัมพันธ์ หรือตาราง เดียว เท่านั้นในแต่ละครั้ง ในกรณีที่คุณต้องการลบ tuple จากความสัมพันธ์ที่แตกต่างกันคุณต้องวางคำสั่ง DELETE ที่แตกต่างกันสำหรับแต่ละ แต่การลบ tuple จากความสัมพันธ์หนึ่งอาจละเมิด Referential integrity ของฐานข้อมูลซึ่งสามารถแก้ไขได้ด้วยความช่วยเหลือของทริกเกอร์ หากคำสั่ง DELETE ละเมิดความสมบูรณ์ของการอ้างอิงแล้ว ทริกเกอร์การ อ้างอิงทั้งหมด (ถ้าระบุ) จะได้รับการเปิดใช้งานเพื่อเผยแพร่การดำเนินการลบบน tuples ที่มีความสัมพันธ์ต่างกันซึ่งอ้างถึงสิ่งอันดับที่ถูกลบ

คำสั่ง DELETE จะ ล็อก แถวหรือทูเปิลก่อนที่จะลบจากนั้นลบทูเปิล ทีละ ตัว ดังนั้นจึงต้องล็อคและทรัพยากรมากขึ้นซึ่งทำให้ ช้าลง คุณสามารถทำการเปลี่ยนแปลงที่ทำโดยคำสั่ง DELETE อย่างถาวรโดยใช้ COMMIT หรือคุณสามารถรีเซ็ตฐานข้อมูลโดยใช้ ROLLBACK

นิยามของ TRUNCATE

TRUNCATE นั้นคล้ายกับคำสั่ง DELETE เนื่องจากมันจะลบทูเปิลออกจากความสัมพันธ์ ความแตกต่างคือมันลบทูเปิลทั้งหมดออกจากความสัมพันธ์ เมื่อรันคำสั่ง TRUNCATE ข้อมูลทั้งหมดจากตารางจะถูกลบออกแต่ละ tuple พร้อมกับค่าคุณลักษณะทั้งหมดจะถูกลบออกจากตาราง แต่โครงสร้างของตารางยังคงมีอยู่ในฐานข้อมูล ดังนั้นคุณสามารถป้อนสิ่งอันดับในตารางอีกครั้ง TRUNCATE เป็น คำสั่ง Data Definition Language

ไวยากรณ์ของคำสั่ง TRUNCATE มีดังนี้:

ตัดทอนตาราง table_name ;

เช่นเดียวกับลบ TRUNCATE ไม่ทำงานบนตารางข้อมูลแบบแถวต่อแถว แต่จะทำงานบน หน้าข้อมูล ที่เก็บข้อมูลตารางแทน ตอนนี้เมื่อ TRUNCATE ลบหน้าข้อมูลมันจะต้องได้รับการ ล็อค ในหน้าข้อมูลแทนที่จะเป็นสิ่งอันดับ ดังนั้นจึงส่งผลให้ความต้องการล็อกและทรัพยากรน้อยลงซึ่งทำให้ TRUNCATE เร็วขึ้น เมื่อเปรียบเทียบกับ DELETE

การประมวลผลคำสั่ง TRUNCATE ไม่ ได้ เปิดใช้งาน ทริกเกอร์ ใด ๆ เนื่องจากไม่ได้ใช้งานข้อมูลแบบแถวต่อแถว TRUNCATE ไม่สามารถดำเนินการได้ในกรณีที่มีการอ้างอิงตารางโดย foreign key ใด ๆ เมื่อคำสั่ง TRUNCATE ลบข้อมูลตารางจะ ไม่ สามารถ กู้คืน ได้

ความแตกต่างที่สำคัญระหว่าง DELETE และ TRUNCATE ใน SQL

  1. ข้อแตกต่างที่สำคัญระหว่าง DELETE และ TRUNCATE คือการใช้ DELETE คุณสามารถลบ tuple ที่ระบุได้จากความสัมพันธ์ แต่การใช้ TRUNCATE จะลบทั้งทูเปิลออกจากความสัมพันธ์
  2. DELETE คือคำสั่ง DML ในขณะที่ TRUNCATE คือคำสั่ง DDL
  3. DELETE ใช้ WHERE clause เพื่อกรองเร็กคอร์ด / สิ่งอันดับที่จะถูกลบ อย่างไรก็ตาม TRUNCATE ไม่จำเป็นต้องใช้ WHERE clause ในการลบสิ่งอันดับทั้งหมดดังนั้นจึงไม่จำเป็นต้องกรองสิ่งอันดับ
  4. DELETE เปิดใช้งานทริกเกอร์อ้างอิงที่ใช้กับตาราง แต่ TRUNCATE จะไม่ยิงทริกเกอร์ใด ๆ บนโต๊ะ
  5. คำสั่ง DELETE กำจัด tuples ทีละตัวจากตารางตามลำดับคำสั่งจะถูกประมวลผล อย่างไรก็ตาม TRUNCATE ไม่ทำงานบน tuples แบบหนึ่งต่อหนึ่ง TRUNCATE จะทำงานบนหน้าข้อมูลที่เก็บข้อมูลตารางแทน
  6. ลบได้รับการล็อคใน tuple ก่อนที่จะลบในขณะที่ TRUNCATE ได้รับการล็อคในหน้าข้อมูลก่อนที่จะลบหน้าข้อมูล
  7. TRUNCATE เร็วกว่าเมื่อเปรียบเทียบกับคำสั่ง DELETE
  8. ลบบันทึกการทำธุรกรรมบันทึกสำหรับแต่ละ tuple ในขณะที่ TRUNCATE บันทึกการทำธุรกรรมบันทึกสำหรับแต่ละหน้าข้อมูล
  9. เมื่อคุณลบข้อมูลโดยใช้ TRUNCATE จะไม่สามารถกู้คืนได้ในขณะที่คุณสามารถกู้คืนข้อมูลที่คุณลบโดยใช้คำสั่ง DELETE

สรุป:

หากคุณต้องการปรับแต่งการลบระเบียนจากตารางคุณสามารถใช้คำสั่ง DELETE ถ้าคุณต้องการลบข้อมูลในตารางนั่นคือคุณไม่ต้องการทิ้งข้อมูลใด ๆ ไว้ในตารางจากนั้นใช้คำสั่ง TRUNCATE

Top