การสร้าง sequence ใน MySQL

บางครั้งทำงานใน 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|

เป็นไงครับพอมองออกหรือปล่าว ยังไงลองเอาไปประยุกต์ใช่กันดูนะครับ เพราะแต่ละคน การเอาไปใช้ การเขียนขึ้นมา จะไม่เหมือนกัน

2 Responses to “การสร้าง sequence ใน MySQL”

  1. tiêm filler bị nhức Says:

    tiêm filler bị nhức

    การสร้าง sequence ใน MySQL · @JDev – Blog

  2. Depo 25 bonus 25 Says:

    It’s the best time to make some plans for the future and it is time to be happy.
    I have read this post and if I could I wish to suggest you few interesting
    things or tips. Maybe you can write next articles referring to this article.
    I desire to read more things about it!