Tags:

SQL | SEQUENCE – Dãy số tăng tự động

SEQUENCE là một tập hợp các số nguyên được tạo thứ tự theo yêu cầu. Các SEQUENCE thường được sử dụng trong cơ sở dữ liệu vì đáp ứng yêu cầu của nhiều ứng dụng là đòi hỏi mỗi hàng trong một bảng chứa một giá trị duy nhất tương tự như khóa chính.

Cách tạo Sequence trong SQL

CREATE SEQUENCE sequence_name
START WITH initial_value
INCREMENT BY increment_value
MINVALUE minimum value
MAXVALUE maximum value
CYCLE|NOCYCLE ;

sequence_name: tên sequence.

initial_value: giá trị bắt đầu của sequence. minimum <= initial_value <= maximum

increment_value: khoảng giá trị mà mỗi lần SEQUENCE tăng, nó có thể là một số dương hoặc âm
minimum_value: Giá trị nhỏ nhất của sequence. 
maximum_value: Giá trị lớn nhất của sequence. 
cycle: Khi gía trị của SEQUENCE đạt đến giới hạn nó sẽ quay trở lại từ đầu

nocycle: Khi đạt gía trị lớn nhất nó sẽ ném ra exception

Ví dụ tạo một SEQUENCE có thứ tự tăng dần, mỗi lần tăng lên 1. Giá trị nhỏ nhất là 0 và lớn nhất là 100. SEQUENCE sẽ tự động lặp lại ban đầu khi nó đạt đến giới hạn 100,.

CREATE SEQUENCE sequence_1
start with 1
increment by 1
minvalue 0
maxvalue 100
cycle;

Một ví dụ khác tạo SEQUENCE giảm dần

CREATE SEQUENCE sequence_2
start with 100
increment by -1
minvalue 1
maxvalue 100
cycle;

Ví dụ tạo bảng Students sử dụng SEQUENCE được tạo ở trên.

CREATE TABLE students
( 
ID number(10),
NAME char(20)
);
INSERT into students VALUES(sequence_1.nextval,'Ramesh');
INSERT into students VALUES(sequence_1.nextval,'Suresh');

Nếu SELECT bảng Students sẽ cho kết quả sau:

 ______________________
| ID  |      NAME      |
------------------------
|  1  |     Ramesh     |
|  2  |     Suresh     |            
 ----------------------

Sử dụng AUTO_INCREMENT

Cách đơn giản nhất trong MySQL để sử dụng các SEQUENCE là định nghĩa một cột là AUTO_INCREMENT.

Ví dụ: Tạo bảng và chèn một số hàng vào trong bảng này, không bắt buộc cung cấp ID vì nó được tự động đánh số bởi MySQL.

Tạo bảng NHANVIEN:

mysql> CREATE TABLE NHANVIEN
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
  • Chèn dữ liệu vào bảng:
mysql> INSERT INTO NHANVIEN (id,name,date,origin) VALUES
   -> (NULL,'hai','1994-04-10','dong nai'),
   -> (NULL,'ha','2012-09-10','hai phong'),
   -> (NULL,'tien','1986-04-10','ha noi');
  • Select dữ liệu từ bảng NHANVIEN:
mysql> SELECT * FROM NHANVIEN ORDER BY id;
 +----+-------------+------------+------------+
 | id | name         | date      | origin   |
 +----+-------------+------------+------------+
 |  1 | hai         | 1994-04-10 | dong nai      |
 |  2 | ha          | 2012-09-10 | hai phong   |
 |  3 | tien        | 1986-04-10 | ha noi      |
 +----+-------------+------------+------------+
 3 rows in set (0.00 sec)

Thay đổi số thứ tự một SEQUENCE đang tồn tại

Sẽ có trường hợp bạn phải xóa nhiều bản ghi từ một bảng và muốn sắp xếp lại thứ tự các bản ghi. Để thực hiện điều này bạn chỉ cần sử dụng một mẹo đơn giản, nhưng nên cẩn thận và kiểm tra xem bảng của bạn có đang join với một bảng khác hay không.

Nếu đã quyết định đánh số lại một cột AUTO_INCREMENT thì bạn thực hiện bằng cách xóa cột này từ bảng, sau đó thêm lại. Ví dụ sau minh họa cách đánh số lại các giá trị id trong bảng NHANVIEN bởi sử dụng kỹ thuật này.

Ví dụ sau minh họa cách đánh số lại các giá 

mysql> ALTER TABLE NHANVIEN DROP id;
mysql> ALTER TABLE NHANVIEN
 ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
 ADD PRIMARY KEY (id);

Bắt đầu SEQUENCE tại một giá trị cụ thể

Theo mặc định, SEQUENCE từ 1, nhưng bạn cũng có thể chỉ định bất kỳ số nào khác tại thời điểm tạo bảng.

Ví dụ sau sẽ bắt đầu SEQUENCE từ 25:

mysql> CREATE TABLE NHANVIEN (
 id INT UNSIGNED NOT NULL AUTO_INCREMENT = 25,
 PRIMARY KEY (id),
 ten VARCHAR(30) NOT NULL, 
 ngaysinh DATE NOT NULL, 
 quequan VARCHAR(30) NOT NULL
);

Ngoài ra, bạn có thể tạo bảng và sau đó đặt giá trị khởi tạo cho SEQUENCE bằng lệnh ALTER TABLE.

mysql> ALTER TABLE t AUTO_INCREMENT = 25;

Nguồn tham khảo

https://www.geeksforgeeks.org/sql-sequences/

https://www.tutorialspoint.com/sql/sql-using-sequences.htm

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x