Blog

SEQUENCE trong SQL Server

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.

Bài viết sẽ cung cấp cho bạn cú pháp và những ví dụ về cách tạo và xóa bỏ sequence trong SQL Server.

CREATE SEQUENCE (Tạo Sequence)

Cú pháp

Để tạo một sequence, ta có cú pháp sau:

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 ];

Tham số:

  • AS datatype: có thể là các kiểu BIGINT, INT, TINYINT, SMALLINT, DECIMAL, or NUMERIC. Nếu không chỉ định một kiểu cụ thể, chương trình sẽ mặc định datatype của bạn ở dạng BIGINT.
  • START WITH value: Giá trị bắt đầu mà sequence trả về.
  • INCREMENT BY value: Quy luật tăng/giảm của sequence, có thể mang giá trị dương hoặc âm. Nếu value ở đây là dương, sequence sẽ là một chuỗi các giá trị tăng dần. Ngược lại là âm, sequence sẽ giảm dần.
  • MINVALUE value: Giá trị nhỏ nhất trong chuỗi.
  • NO MINVALUE: Không chỉ định giá trị nhỏ nhất.
  • MAXVALUE value: Giá trị lớn nhất trong chuỗi.
  • NO MAXVALUE: Không chỉ định giá trị lớn nhất.
  • CYCLE: Sequence sẽ bắt đầu lại từ đầu khi nó hoàn thành chuỗi.
  • NO CYCLE: Sequence sẽ xảy ra lỗi khi kết thúc chuỗi, nó sẽ không bắt đầu lại khi hoàn thành.
  • CACHE value: Lưu ở bộ nhớ đệm (cache) để giảm thiểu cho disk IO.
  • NO CACHE: Không lưu ở cache.

Ví dụ

CREATE SEQUENCE contacts_seq AS BIGINT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 99999 NO CYCLE CACHE 10;

Ở đây ta đã tạo một sequence có tên là contacts_seq, bắt đầu từ giá trị 1, mỗi giá trị sau tăng thêm một đơn vị (tức là 2, 3, 4…). Chuỗi sẽ lưu khoảng 10 giá trị vào bộ nhớ cache. Giá trị lớn nhất trong sequence là 99999 và nó sẽ không bắt đầu lại chuỗi sau khi sequence kết thúc ở giá trị lớn nhất.

Bạn cũng có thể thực hiện lệnh trên một cách đơn giản như sau:

CREATE SEQUENCE contacts_seq  START WITH 1  INCREMENT BY 1;

Vậy là vừa xong bạn đã tạo sequence mô phỏng một trường autonumber. Tiếp theo, để xuất một giá trị từ dãy này ta sử dụng lệnh NEXT VALUE FOR

SELECT NEXT VALUE FOR contacts_seq;

Câu lệnh này sẽ lấy giá trị tiếp theo từ contacts_seq. Tiếp đó sử dụng các câu lệnh cần thiết cho việc thực thi của bạn. Ví dụ:

INSERT INTO contacts  (contact_id, last_name)VALUES  (NEXT VALUE FOR contacts_seq, 'Smith');

Câu lệnh INSERT này sẽ chèn một bản ghi mới vào bảng contact. Trường contact_id sẽ được gán số tiếp theo từ chuỗi contacts_seq, trường last_name sẽ là ‘Smith’.

DROP SEQUENCE (Xóa bỏ Sequence)

Một khi đã tạo thành công các sequence thì cũng sẽ có những trường hợp bạn muốn xóa bỏ sequence khỏi cơ sở dữ liệu vì một vài lý do.

Cú pháp

Để xóa bỏ , ta có cú pháp sau:

DROP SEQUENCE sequence_name;

Tham số:

sequence_name: Tên sequence bạn muốn xóa bỏ.

Ví dụ

DROP SEQUENCE contacts_seq;

Thực hiện lệnh này là bạn đã vừa xóa bỏ chuỗi contacts_seq khỏi database.

Thuộc tính của Sequence

Để kiểm tra thuộc tính, ta có cú pháp sau:

SELECT *
FROM sys.sequences
WHERE name = 'sequence_name';

Tham số:

sequence_name: Tên chuỗi muốn kiểm tra thuộc tính.

Ví dụ

SELECT *FROM sys.sequencesWHERE name = 'contacts_seq';

Ví dụ này truy vấn thông tin từ hệ thống sys.sequences và truy xuất kết quả cho chuỗi contacts_seq.

Hệ thống sys.sequences gồm các cột sau:

CỘTCHÚ THÍCH
nameTên sequence đã được tạo ở câu lệnh CREATE SEQUENCE
object_idID của đối tượng
principal_idID principal của sequence (giá trị số)
schema_idID Schema của sequence
parent_object_idID của đối tượng cha
typeSO
type_descSEQUENCE_OBJECT
create_dateNgày/Thời gian tạo sequence bằng lệnh CREATE SEQUENCE
modify_dateNgày/Thời gian cuối cùng chỉnh sửa sequence
is_ms_shippedGiá trị 0 hoặc 1
is_publishedGiá trị 0 hoặc 1
is_schema_publishedGiá trị 0 hoặc 1
start_valueGiá trị bắt đầu của sequence
incrementGiá trị quy luật tăng/giảm của sequence
minimum_valueGiá trị nhỏ nhất trong chuỗi
maximum_valueGiá trị lớn nhất trong chuỗi
is_cyclingGiá trị 0 hoặc 1. 0=NO CYCLE, 1=CYCLE
is_cachedGiá trị 0 hoặc 1, 0=NO CACHE, 1=CACHE
cache_sizeKích thước của bộ nhớ đệm khi is_cached = 1
system_type_idID system của sequence
user_type_idID loại user của sequence
precisionĐộ chính xác tối đa cho kiểu dữ liệu của sequence
scalePhạm vi tối đa cho kiểu dữ liệu của sequence
current_valueGiá trị cuối cùng được truy xuất từ sequence
is_exhaustedGiá trị 0 hoặc 1. 0=Có nhiều giá trị trong sequence. 1=Không có giá trị

Lộ trình đào tạo trở thành Data Engineer tại INDA

Khóa học Data Engineer tại INDA cung cấp một lộ trình bài bản, chuyên nghiệp cho bất cứ ai có mong muốn trở thành một kỹ sư dữ liệu. Các kiến thức tại INDA được đào tạo từ kiến thức cơ bản tới nâng cao bởi các giảng viên, trợ giảng dày dặn kinh nghiệm

Lộ trình đào tạo trở thành Data Engineer tại INDA bao gồm:

  • Kiến thức về ngôn ngữ truy vấn SQL và công cụ SQL Server
  • Hiểu và thành thạo ETL và Data Warehouse
  • Biết biểu diễn trực quan hóa dữ liệu với Power BI
  • Kiến thức về Data Lake/Big Data

Không thể phủ nhận được rằng Data Engineer dường như đang trở thành xu hướng nghề trong thời đại mới, khi mà CNTT phát triển không ngừng và nhu cầu tuyển dụng các kỹ sư dữ liệu của doanh nghiệp là rất lớn. Với chút chia sẻ về nghề kỹ sư dữ liệu, INDA hi vọng sẽ giúp bạn có cái nhìn tổng quát về công việc cũng như định hướng của mình.

Nguồn: Internet

Leave a Reply

Your email address will not be published. Required fields are marked *