การสร้าง sequence ใน MySQL
June 15th, 2011บางครั้งทำงานใน MySQL แต่ติดการใช้ Sequence แบบใน Oracle ซะแล้ว ก็เลยหาวิธีใช้ ปรากฏว่าพริกแพลงได้ตามนี้ครับ
1. สร้าง Table สำหรับใช้เป็นที่เก็บ sequence
1 2 3 4 5 | CREATE TABLE `agt_sequence` ( `seq_name` varchar(64) PRIMARY KEY , `seq_val` bigint(20) UNSIGNED NOT NULL , PRIMARY KEY (`seq_name`) ) |
2. ผมจะสร้าง Function เพื่อจัดการกับ Table sequence เพื่อให้สะดวกต่อการนำมาใช้งาน
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | CREATE FUNCTION `agt_nextval`(`v_seq_name` varchar(64),`v_char_length` bigint) RETURNS varchar(64) CHARSET utf8 MODIFIES SQL DATA SQL SECURITY INVOKER BEGIN DECLARE tp_seq_name VARCHAR(64); DECLARE tp_seq_val BIGINT(20); SELECT seq_name, seq_val + 1 AS seq_val INTO tp_seq_name, tp_seq_val FROM agt_sequence WHERE seq_name = v_seq_name LIMIT 1 FOR UPDATE; UPDATE agt_sequence SET seq_val = tp_seq_val WHERE seq_name = v_seq_name; RETURN LPAD(tp_seq_val,v_char_length,0); END; |
1 2 3 | คำอธิบาย v_seq_name = ค่าที่อยู่ใน table sequence เพื่อใช้ในการเป็นเงื่อนไขในการดึงค่าของ sequence ขึ้นมา v_char_length = ค่าจำนวนตัวอักษรที่จะให้ return เช่น v_char_length = 3 ค่าที่จะ return จะเป็นได้ 001, 002, ... , 999 |
สามารถเอาไปเทสได้ ดังนี้
1 | SELECT agt_nextval( 'a',4 ) |
ผลลัพธ์
1 2 | |agt_nextval('a',4)| |0028| |
เป็นไงครับพอมองออกหรือปล่าว ยังไงลองเอาไปประยุกต์ใช่กันดูนะครับ เพราะแต่ละคน การเอาไปใช้ การเขียนขึ้นมา จะไม่เหมือนกัน