Sequence (ลำดับ) คือชุดจำนวนเต็มที่จัดเรียงตามลำดับ Sequences มักใช้ในฐานข้อมูลเพราะความต้องการของหลายแอปพลิเคชันต้องการให้แต่ละแถวในตารางมีค่าเฉพาะเจาะจงคล้าย Primary Key
บทความนี้จะให้ไวยากรณ์และตัวอย่างวิธีสร้างและลบ Sequence ใน SQL Server
CREATE SEQUENCE (สร้าง Sequence)
ไวยากรณ์
การสร้าง Sequence มีไวยากรณ์ดังนี้:
CREATE SEQUENCE [schema.] Sequence_name
[AS datatype]
[START WITH value]
[INCREMENT BY value]
[MINVALUE value | NO MINVALUE]
[MAXVALUE value | NO MAXVALUE]
[CYCLE | NO CYCLE]
[CACHE value | NO CACHE];
พารามิเตอร์:
- AS datatype: อาจเป็น BIGINT, INT, TINYINT, SMALLINT, DECIMAL, หรือ NUMERIC หากไม่ระบุชนิดเฉพาะ โปรแกรมจะใช้ BIGINT เป็นค่าเริ่มต้น
- START WITH value: ค่าที่ Sequence คืนค่าแรก
- INCREMENT BY value: กฎการเพิ่ม/ลดของ Sequence อาจเป็นบวกหรือลบ หากค่าบวก Sequence จะเพิ่มขึ้น ตรงข้ามถ้าเป็นลบ Sequence จะลดลง
- MINVALUE value: ค่าน้อยที่สุดในลำดับ
- NO MINVALUE: ไม่ระบุค่าต่ำสุด
- MAXVALUE value: ค่าสูงสุดในลำดับ
- NO MAXVALUE: ไม่ระบุค่าสูงสุด
- CYCLE: Sequence จะเริ่มใหม่เมื่อครบลำดับ
- NO CYCLE: Sequence จะล้มเหลวเมื่อจบลำดับ ไม่เริ่มใหม่เมื่อครบ
- CACHE value: เก็บในแคช (cache) เพื่อลด disk I/O
- NO CACHE: ไม่เก็บในแคช
ตัวอย่าง
CREATE SEQUENCE contacts_seq
AS BIGINT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 99999
NO CYCLE
CACHE 10;
ที่นี่เราสร้าง Sequence ชื่อ contacts_seq เริ่มจากค่า 1 ค่าถัดไปเพิ่มขึ้นทีละ 1 (คือ 2, 3, 4...) ลำดับจะเก็บประมาณ 10 ค่าในแคช ค่าสูงสุดคือ 99999 และจะไม่เริ่มลำดับใหม่หลังจบที่ค่าสูงสุด
คุณสามารถรันคำสั่งด้านบนอย่างง่ายได้ดังนี้:
CREATE SEQUENCE contacts_seq
START WITH 1
INCREMENT BY 1;
ตอนนี้คุณสร้าง Sequence ที่จำลองฟิลด์ autonumber แล้ว ต่อไป เพื่อดึงค่าจาก Sequence นี้ ใช้คำสั่ง NEXT VALUE FOR
SELECT NEXT VALUE FOR contacts_seq;
คำสั่งนี้จะดึงค่าถัดไปจาก contacts_seq จากนั้นใช้คำสั่งที่จำเป็นสำหรับการทำงานของคุณ เช่น:
INSERT INTO contacts
(contact_id, last_name)
VALUES
(NEXT VALUE FOR contacts_seq, 'Smith');
คำสั่ง INSERT นี้แทรกระเบียนใหม่เข้าไปในตาราง contacts ฟิลด์ contact_id จะได้รับหมายเลขถัดไปจาก contacts_seq ฟิลด์ last_name จะเป็น 'Smith'
DROP SEQUENCE (ลบ Sequence)
หลังจากสร้าง Sequence แล้ว จะมีกรณีที่ต้องการลบ Sequence ออกจากฐานข้อมูลด้วยเหตุผลบางอย่าง
ไวยากรณ์
การลบ Sequence มีไวยากรณ์ดังนี้:
DROP SEQUENCE sequence_name;
พารามิเตอร์:
sequence_name: ชื่อ Sequence ที่ต้องการลบ
ตัวอย่าง
DROP SEQUENCE contacts_seq;
การรันคำสั่งนี้จะลบ contacts_seq ออกจากฐานข้อมูล
คุณสมบัติของ Sequence
เพื่อตรวจสอบคุณสมบัติของ Sequence มีไวยากรณ์ดังนี้:
SELECT * FROM sys.sequences WHERE name = 'sequence_name';
พารามิเตอร์:
sequence_name: ชื่อลำดับที่ต้องการตรวจสอบคุณสมบัติ
ตัวอย่าง
SELECT *
FROM sys.sequences
WHERE name = 'contacts_seq';
ตัวอย่างนี้สืบค้นข้อมูลจากระบบ sys.sequences และดึงผลลัพธ์สำหรับลำดับ contacts_seq
ระบบ sys.sequences ประกอบด้วยคอลัมน์ต่อไปนี้: name, object_id, principal_id, schema_id, parent_object_id, type, type_desc, create_date, modify_date, is_ms_shipped, is_published, is_schema_published, start_value, increment, minimum_value, maximum_value, is_cycling, is_cached, cache_size, system_type_id, user_type_id, precision, scale, current_value, is_exhausted