เหตุใดจึงตัด DDL


15

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

Q. ทำไม Truncate เป็น DDL ที่ไหนในขณะที่ Delete เป็น DML ทั้งสองทำงานเกือบเหมือนกัน (ลบแถว)

Ans เมื่อเราใช้ Truncate เราจะยกเลิกการจัดสรรพื้นที่ทั้งหมดที่จัดสรรโดยข้อมูลโดยไม่บันทึกลงใน undo-table-space แต่ในกรณีของการลบเราจะใส่ข้อมูลทั้งหมดในเลิกทำพื้นที่ตารางแล้วเราจะลบข้อมูลทั้งหมด

กรุณาถ้าใครรู้คำตอบที่ดีที่สุดสำหรับข้างต้นโปรดอธิบาย


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
พอลไวท์ 9

คำตอบ:


14

ความแตกต่างของ DML เทียบกับ DDL นั้นไม่ชัดเจนเหมือนชื่อของพวกเขาดังนั้นบางครั้งบางสิ่งก็สกปรก

Oracle จัดประเภทTRUNCATEอย่างชัดเจนว่าเป็น DDLในแนวทางแนวคิด แต่DELETEเป็น DML

ประเด็นหลักที่วางTRUNCATEในค่าย DDL บน Oracle ตามที่ฉันเข้าใจคือ:

  • TRUNCATEสามารถเปลี่ยนพารามิเตอร์หน่วยเก็บข้อมูล ( NEXTพารามิเตอร์) และสิ่งเหล่านั้นเป็นส่วนหนึ่งของคำนิยามของวัตถุ - ที่อยู่ในค่าย DDL
  • TRUNCATEโดยนัยcommitและไม่สามารถย้อนกลับ (ย้อนหลัง) - การดำเนินการ DDL ส่วนใหญ่ (ทั้งหมด?) ใน Oracle ทำสิ่งนี้ไม่มี DML ทำ

ความจริงที่TRUNCATEไม่ได้เรียกใช้ON DELETEทริกเกอร์ยังตั้งค่านอกเหนือจากการดำเนินงาน DML ปกติ (แต่การดำเนินการโดยตรงบางเส้นทาง DML ยังข้ามตัวเรียกดังนั้นนั่นไม่ใช่ตัวบ่งชี้ที่ชัดเจน)

บันทึกย่อเอกสารเดียวกันนั้นที่DELETEสร้าง UNDO แต่TRUNCATEไม่ทำดังนั้นคำสั่งของคุณจึงถูกต้องในส่วนนี้ (โปรดทราบว่าTRUNCATEจะสร้างบางส่วนREDOเพื่อให้สามารถตัดทอนซ้ำในกรณีที่กู้คืน / กู้คืน) แต่NOLOGGINGการดำเนินการบางอย่างสามารถลด UNDO ที่ลดลง (ไม่แน่ใจว่าไม่มีเลย) ดังนั้นนั่นไม่ใช่ตัวบ่งชี้ที่ชัดเจนในความคิดของฉัน

ดังนั้นฉันจะสรุปเป็น:

  • truncateไม่ใช่ "การทำธุรกรรม" ในแง่ที่ยอมรับและไม่สามารถย้อนกลับได้และสามารถปรับเปลี่ยนแอตทริบิวต์ที่เก็บข้อมูลวัตถุ ดังนั้นจึงไม่ใช่ DML ทั่วไป - Oracle จัดประเภทเป็น DDL
  • delete เป็นคำสั่ง DML สามัญ

เมื่อคุณสร้างตารางคุณสามารถระบุสิ่งต่าง ๆ เช่น tablespace เข้าไปในขนาดเริ่มต้นขนาดขอบเขตถัดไปเป็นต้นซึ่งเป็นคุณลักษณะหน่วยเก็บข้อมูล ใช่พวกเขาเป็นส่วนหนึ่งของข้อมูลเมตา (หรือดัชนีหรือพาร์ติชัน) ของตาราง
Mat

โปรดทราบว่ามาตรฐาน SQL แสดงรายการ TRUNCATE ในบท "Data manipulation" พร้อมกับ INSERT, DELETE และ UPDATE
a_horse_with_no_name

2

ผมคิดว่าtruncateมีความคล้ายคลึงกับdrop, alter, createขณะที่พวกเขาทำงานทั้งหมดบนโต๊ะคือพวกเขาทุกคนมีคำสั่งระดับตาราง ขณะที่ 'ลบ' คล้ายกับinsert, select, updateในขณะที่การทำงานทั้งหมดในแถวคือพวกเขาทั้งหมดมีคำสั่งระดับแถว

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