เราไม่ควรหยุดที่นี่มีความแตกต่างอื่น ๆ อีกมากมายระหว่าง DELETE และ TRUNCATE ให้เราคุยกับพวกเขาด้วยความช่วยเหลือของกราฟเปรียบเทียบที่แสดงด้านล่าง
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | ลบ | ตัด |
---|---|---|
ขั้นพื้นฐาน | คุณสามารถระบุ tuple ที่คุณต้องการลบ | มันจะลบสิ่งอันดับทั้งหมดออกจากความสัมพันธ์ |
ภาษา | DELETE เป็นคำสั่ง Data Manipulation Language | TRUNCATE เป็นคำสั่ง Data Definition Language |
WHERE | คำสั่ง DELETE สามารถมี WHERE clause ได้ | คำสั่ง TRUNCATE ไม่มีส่วนคำสั่ง WHERE |
ไก | คำสั่ง DELETE จะเปิดใช้งานทริกเกอร์ที่ใช้บนโต๊ะและทำให้มันเริ่มทำงาน | คำสั่ง TRUNCATE ไม่เปิดใช้งานทริกเกอร์เพื่อเริ่มทำงาน |
การลบ | คำสั่ง DELETE กำจัด tuples ทีละตัว | TRUNCATE ลบหน้าข้อมูลทั้งหมดที่มีสิ่งอันดับ |
ล็อค | คำสั่ง DELETE ล็อคแถว / ทูเปิลก่อนที่จะลบ | ตัดคำสั่ง TRUNCATE หน้าข้อมูลก่อนที่จะลบข้อมูลตาราง |
ความเร็ว | คำสั่ง DELETE ทำงานช้าลงเมื่อเปรียบเทียบกับ TRUNCATE | TRUNCATE นั้นเร็วกว่าเมื่อเปรียบเทียบกับ 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
- ข้อแตกต่างที่สำคัญระหว่าง DELETE และ TRUNCATE คือการใช้ DELETE คุณสามารถลบ tuple ที่ระบุได้จากความสัมพันธ์ แต่การใช้ TRUNCATE จะลบทั้งทูเปิลออกจากความสัมพันธ์
- DELETE คือคำสั่ง DML ในขณะที่ TRUNCATE คือคำสั่ง DDL
- DELETE ใช้ WHERE clause เพื่อกรองเร็กคอร์ด / สิ่งอันดับที่จะถูกลบ อย่างไรก็ตาม TRUNCATE ไม่จำเป็นต้องใช้ WHERE clause ในการลบสิ่งอันดับทั้งหมดดังนั้นจึงไม่จำเป็นต้องกรองสิ่งอันดับ
- DELETE เปิดใช้งานทริกเกอร์อ้างอิงที่ใช้กับตาราง แต่ TRUNCATE จะไม่ยิงทริกเกอร์ใด ๆ บนโต๊ะ
- คำสั่ง DELETE กำจัด tuples ทีละตัวจากตารางตามลำดับคำสั่งจะถูกประมวลผล อย่างไรก็ตาม TRUNCATE ไม่ทำงานบน tuples แบบหนึ่งต่อหนึ่ง TRUNCATE จะทำงานบนหน้าข้อมูลที่เก็บข้อมูลตารางแทน
- ลบได้รับการล็อคใน tuple ก่อนที่จะลบในขณะที่ TRUNCATE ได้รับการล็อคในหน้าข้อมูลก่อนที่จะลบหน้าข้อมูล
- TRUNCATE เร็วกว่าเมื่อเปรียบเทียบกับคำสั่ง DELETE
- ลบบันทึกการทำธุรกรรมบันทึกสำหรับแต่ละ tuple ในขณะที่ TRUNCATE บันทึกการทำธุรกรรมบันทึกสำหรับแต่ละหน้าข้อมูล
- เมื่อคุณลบข้อมูลโดยใช้ TRUNCATE จะไม่สามารถกู้คืนได้ในขณะที่คุณสามารถกู้คืนข้อมูลที่คุณลบโดยใช้คำสั่ง DELETE
สรุป:
หากคุณต้องการปรับแต่งการลบระเบียนจากตารางคุณสามารถใช้คำสั่ง DELETE ถ้าคุณต้องการลบข้อมูลในตารางนั่นคือคุณไม่ต้องการทิ้งข้อมูลใด ๆ ไว้ในตารางจากนั้นใช้คำสั่ง TRUNCATE