SAP บทช่วยสอน HANA: สร้างลำดับ
⚡ สรุปอย่างชาญฉลาด
สร้างลำดับใน SAP HANA มีอ็อบเจ็กต์ฐานข้อมูลที่สร้างรายการค่าตัวเลขที่เพิ่มขึ้นโดยอัตโนมัติ พารามิเตอร์จะควบคุมค่าเริ่มต้น การเพิ่มขึ้น ขีดจำกัด การวนรอบ และพฤติกรรมการแคชของตัวสร้างนี้
ลำดับคืออะไร?
ลำดับคือออบเจ็กต์ฐานข้อมูลที่สร้างรายการค่าตัวเลขที่เพิ่มขึ้นโดยอัตโนมัติตามกฎที่ระบุในข้อกำหนดเฉพาะของลำดับ
ตัวอย่างเช่น ในการแทรกหมายเลขพนักงานโดยอัตโนมัติในคอลัมน์ (EMPLOYEE_NO) ของตาราง เมื่อมีการแทรกบันทึกใหม่ในตาราง เราจะใช้ลำดับ
ค่าลำดับจะถูกสร้างขึ้นตามลำดับจากน้อยไปหามากหรือจากมากไปหาน้อย
ลำดับไม่เกี่ยวข้องกับตาราง แอปพลิเคชันเหล่านั้นถูกใช้ มีสองค่าตามลำดับ -
- CURRVAL – ระบุค่าปัจจุบันของลำดับ
- NEXTVAL – ระบุค่าถัดไปของลำดับ
ซิงค์
CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]
องค์ประกอบไวยากรณ์
| ELEMENTS | DESCRIPTION |
|---|---|
| มันคือชื่อของลำดับ | |
| - - | โดยจะระบุพารามิเตอร์ลำดับตั้งแต่หนึ่งรายการขึ้นไป |
| เริ่มกับ | มันอธิบายค่าลำดับเริ่มต้น |
| เพิ่มขึ้นโดย | นี่เป็นการระบุค่าที่จะเพิ่มจากค่าสุดท้ายที่กำหนดในแต่ละครั้งเมื่อสร้างค่าลำดับใหม่ ค่าเริ่มต้นคือ 1 |
| MAXVALUE | นี่เป็นการระบุค่าสูงสุดที่ลำดับสามารถสร้างได้ ค่าอาจอยู่ระหว่าง -4611686018427387903 และ 4611686018427387902 |
| ไม่มีค่าสูงสุด | เมื่อระบุ NO MAXVALUE สำหรับลำดับที่เพิ่มขึ้น ค่าสูงสุดจะเป็น 4611686018427387903 และค่าต่ำสุดสำหรับลำดับที่ลดลงจะเป็น -1 |
| มินแวล / ไม่มีมูลค่าขั้นต่ำ | ระบุค่าต่ำสุดที่ลำดับนั้นสามารถสร้างได้ ค่าจะอยู่ระหว่าง -4611686018427387904 และ 4611686018427387902 เมื่อใช้ NO MINVALUE ค่าต่ำสุดสำหรับลำดับที่เพิ่มขึ้นคือ 1 |
| รอบ | คำสั่ง CYCLE ระบุว่าหมายเลขลำดับจะเริ่มต้นใหม่หลังจากถึงค่าสูงสุดหรือค่าต่ำสุดแล้ว |
| ไม่มีวงจร | ตัวเลือกเริ่มต้น คำสั่ง NO CYCLE ระบุว่าหมายเลขลำดับจะไม่เริ่มต้นใหม่หลังจากถึงค่าสูงสุดหรือค่าต่ำสุดแล้ว |
| แคช | ขนาดแคชจะระบุช่วงหมายเลขลำดับที่จะถูกแคชไว้ในโหนด ต้องเป็นจำนวนเต็มที่ไม่ติดลบ |
| ไม่มีแคช | ตัวเลือกเริ่มต้น คำสั่ง NO CACHE ระบุว่าหมายเลขลำดับจะไม่ถูกแคชไว้ในโหนด |
| รีเซ็ตโดย | โดยระบุว่าในระหว่างการรีสตาร์ทฐานข้อมูล ฐานข้อมูลจะดำเนินการโดยอัตโนมัติ และค่าลำดับจะรีสตาร์ทด้วยค่าที่ส่งคืน |
ตัวอย่าง -
เราจะสร้างลำดับที่มีชื่อว่า DHK_SCHEMA.EMP_NO ซึ่งจะสร้างค่าที่เพิ่มขึ้นของลำดับ +1 ในแต่ละครั้งเมื่อมีการใช้ลำดับ
สคริปต์ลำดับ –
CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;
ที่นี่เราจะใช้วัตถุ "ลำดับ" ในตัวอย่างด้านล่างเพื่อเพิ่มมูลค่าของพนักงานไม่ +1 แต่ละครั้งที่มีการดำเนินการแบบสอบถามแบบใช้เลือกข้อมูล ในแบบสอบถาม สามารถใช้ "nextval" สำหรับการสร้างหมายเลขซีเรียลหรือข้อกำหนดประเภทเดียวกันได้
การใช้ลำดับ –
SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;
ผลลัพธ์ – 100, 101, 102 … และอื่นๆ สำหรับทุกการเรียกใช้คำสั่ง select ข้างต้น
วิธีการใช้ลำดับในตาราง
ตัวอย่างข้างต้นส่งคืนค่าตัวเลข แต่ไม่ได้จัดเก็บไว้ที่ใด มีรูปแบบสามแบบที่เชื่อมโยงลำดับกับข้อมูลจริง และการเลือกรูปแบบที่เหมาะสมนั้นขึ้นอยู่กับว่าแอปพลิเคชันต้องการการควบคุมมากน้อยเพียงใด
1) เรียกใช้ NEXTVAL โดยตรงในคำสั่ง INSERT วิธีการที่ชัดเจนที่สุด คือ แอปพลิเคชันจะเป็นผู้ตัดสินใจว่าจะใช้หมายเลขนั้นเมื่อใด
CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE ( EMPLOYEE_NO INTEGER NOT NULL, EMP_NAME NVARCHAR(100), PRIMARY KEY (EMPLOYEE_NO) ); INSERT INTO DHK_SCHEMA.EMPLOYEE VALUES (DHK_SCHEMA.EMP_NO.NEXTVAL, 'Anita Sharma');
2) ใช้ลำดับดังกล่าวเป็นค่าเริ่มต้นของคอลัมน์ ระบบจะกำหนดหมายเลขให้แม้ว่าคำสั่งแทรกข้อมูลจะไม่ได้ระบุคอลัมน์ ซึ่งเหมาะสำหรับแอปพลิเคชันที่ไม่เคยถูกเขียนขึ้นมาให้รู้จักลำดับดังกล่าวมาก่อน
CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE2 ( EMPLOYEE_NO INTEGER DEFAULT DHK_SCHEMA.EMP_NO.NEXTVAL, EMP_NAME NVARCHAR(100) ); INSERT INTO DHK_SCHEMA.EMPLOYEE2 (EMP_NAME) VALUES ('Ravi Kumar');
3) อ่านค่าที่เพิ่งได้รับมา CURRVAL จะส่งคืนหมายเลขสุดท้ายที่ใช้ในเซสชันนี้ ซึ่งเป็นวิธีที่แถวลูกเชื่อมโยงกับแถวแม่ที่เพิ่งแทรกเข้าไป
SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;
⚠️คำเตือน: ฟังก์ชัน CURRVAL จะล้มเหลวและแสดงข้อผิดพลาดจนกว่าจะมีการเรียกใช้ NEXTVAL อย่างน้อยหนึ่งครั้งในเซสชันปัจจุบัน ฟังก์ชันนี้จะรายงานค่าที่กำหนดให้กับเซสชันนี้ ไม่ใช่ค่าสูงสุดโดยรวม ดังนั้นสองเซสชันจึงสามารถมีค่ากระแสไฟฟ้าที่แตกต่างกันได้ในเวลาเดียวกัน
ลำดับเทียบกับคอลัมน์เอกลักษณ์
SAP HANA ยังมีคอลัมน์ระบุตัวตน (identity column) ซึ่งสร้างตัวเลขโดยไม่ต้องมีอ็อบเจ็กต์แยกต่างหาก ทั้งสองวิธีนี้แก้ปัญหาเดียวกันแต่ใช้วิธีการที่แตกต่างกัน
| พารามิเตอร์ | ลำดับ | คอลัมน์เอกลักษณ์ |
|---|---|---|
| ประเภทวัตถุ | วัตถุฐานข้อมูลอิสระ | คุณสมบัติคอลัมน์ของตารางหนึ่งตาราง |
| แบ่งปันกันระหว่างโต๊ะ | ใช่ ตารางจำนวนเท่าใดก็ได้สามารถดึงข้อมูลจากตารางนี้ได้ | ไม่ มันอยู่ในคอลัมน์เดียว |
| ค่าที่มองเห็นได้ก่อนการแทรก | ใช่ ผ่านทาง NEXTVAL | ไม่ สร้างขึ้นระหว่างการแทรก |
| คำนิยาม | สร้างลำดับ | สร้างขึ้นโดยค่าเริ่มต้นเป็นรหัสประจำตัว |
| เหมาะสำหรับ | การกำหนดหมายเลขร่วมกัน การแทรกข้อมูลระหว่างผู้ปกครองและเด็ก | คีย์ตัวแทนแบบง่ายบนตารางเดียว |
เลือกใช้ลำดับเมื่อจำเป็นต้องทราบหมายเลขก่อนที่แถวนั้นจะปรากฏ หรือเมื่อหลายตารางใช้ชุดหมายเลขเดียวกัน เลือกใช้คอลัมน์ระบุตัวตนสำหรับคีย์ตัวแทนแบบธรรมดาที่ไม่มีข้อกำหนดที่กว้างกว่านั้น
การจัดการลำดับ: ALTER, DROP และช่องว่าง
ลำดับขั้นตอนต่างๆ มักไม่คงเดิมเหมือนตอนแรกที่สร้างไว้ มีงานบำรุงรักษาอยู่สามอย่างที่เกิดขึ้นซ้ำๆ
การเปลี่ยนแปลงพฤติกรรม คำสั่ง ALTER SEQUENCE จะปรับค่าเพิ่มขึ้น ขีดจำกัด หรือรอบการทำงานของลำดับที่มีอยู่โดยไม่ทำให้ลำดับนั้นหายไปping คำสั่ง RESTART WITH จะรีเซ็ตตัวนับ ซึ่งเป็นขั้นตอนปกติหลังจากโหลดข้อมูลทดสอบใหม่
ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000; ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10; DROP SEQUENCE DHK_SCHEMA.EMP_NO;
ความเข้าใจเกี่ยวกับช่องว่าง หมายเลขลำดับไม่รับประกันว่าจะต่อเนื่องกัน และนี่ทำให้ผู้ที่คาดหวังว่าจะมีร่องรอยการตรวจสอบที่ไม่ขาดตอนรู้สึกประหลาดใจ ช่องว่างเกิดขึ้นจากสามสาเหตุ:
- ยกเลิกธุรกรรมแล้ว NEXTVAL ไม่รองรับการทำธุรกรรม หมายเลขที่ใช้ไปกับการแทรกข้อมูลแล้วถูกยกเลิกในภายหลัง จะไม่ถูกนำกลับมาใช้ใหม่
- เก็บเอาไว้. ด้วยการตั้งค่า CACHE 100 โหนดจะสำรองค่าไว้ 100 ค่าในคราวเดียว การรีสตาร์ทจะลบค่าที่เหลือซึ่งไม่ได้ใช้งานในบล็อกนั้นทิ้งไป
- การประชุมพร้อมกัน การแทรกข้อมูลสองชุดพร้อมกันจะสลับหมายเลขกัน ทำให้แต่ละชุดไม่เห็นลำดับที่ต่อเนื่องกัน
หลักการปฏิบัติคือ ให้ถือว่าลำดับเป็นแหล่งที่มาของตัวระบุที่ไม่ซ้ำกัน ไม่ใช่เป็นตัวนับจำนวนแถวที่มีอยู่ ในกรณีที่กฎหมายกำหนดให้ต้องใช้ลำดับที่ไม่ขาดตอน เช่น การกำหนดหมายเลขใบแจ้งหนี้ ลำดับนั้นจะต้องสร้างขึ้นโดยตรรกะของแอปพลิเคชันด้วยการควบคุมของตัวเอง แทนที่จะสร้างจากลำดับในฐานข้อมูล
การค้นหาสิ่งที่มีอยู่ มุมมองระบบ SEQUENCES แสดงรายการลำดับทั้งหมดพร้อมค่าปัจจุบัน ซึ่งเป็นวิธีที่เร็วที่สุดในการตรวจสอบโครงสร้างข้อมูล ไวยากรณ์ที่เกี่ยวข้องจะกล่าวถึงใน SAP ฮาน่า SQL และคำจำกัดความของคอลัมน์ใน SAP ประเภทข้อมูล HANA.

