GUID trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu về GUID trong SQL Server và cách sử dụng  hàm NEWID() để tạo giá trị GUID.

Giới thiệu về GUID trong SQL Server

Tất cả mọi thứ trong thế giới của chúng ta đều được đánh số, ví dụ sách có ISBN, ô tô có VIN và mọi người có số an sinh xã hội (SSN).

Các con số hoặc mã định danh giúp chúng ta tham chiếu mọi thứ một cách rõ ràng. Ví dụ: chúng ta có thể xác định John Doe bằng cách sử dụng số an sinh xã hội duy nhất của anh ấy 123-45-6789.

Số nhận dạng duy nhất trên toàn cầu hoặc GUID là phiên bản rộng hơn của loại số ID này.

GUID được đảm bảo là duy nhất trên các bảng, cơ sở dữ liệu và thậm chí cả máy chủ.

Trong SQL Server, GUID là kiểu dữ liệu nhị phân 16 byte, được tạo bằng cách sử dụng hàm NEWID():

SELECT NEWID() AS GUID;

Nếu bạn thực hiện câu lệnh trên nhiều lần, bạn sẽ thấy giá trị khác nhau mỗi lần. Đây là một trong số chúng:

GUID
------------------------------------
3297F0F2-35D3-4231-919D-1CFCF4035975

(1 row affected)

Trong SQL Server, kiểu dữ liệu UNIQUEIDENTIFIER chứa các giá trị GUID.

Các câu lệnh sau khai báo một biến có kiểu UNIQUEIDENTIFIER và gán cho nó một giá trị GUID do hàm NEWID() tạo ra.

DECLARE @id UNIQUEIDENTIFIER;

SET @id = NEWID();

SELECT @id AS GUID;

Đây là kết quả:

GUID
------------------------------------
69AA3BA5-D51E-465E-8447-ECAA1939739A

(1 row affected)

Sử dụng GUID trong SQL Server làm khóa chính

Đôi khi, bạn thích sử dụng các giá trị GUID cho cột khóa chính của bảng hơn là sử dụng số nguyên.

Sử dụng GUID làm khóa chính của bảng mang lại những lợi ích sau:

  • Giá trị GUID là duy nhất trên toàn cầu trên các bảng, cơ sở dữ liệu và thậm chí cả máy chủ. Do đó, nó cho phép bạn hợp nhất dữ liệu từ các máy chủ khác nhau một cách dễ dàng.
  • Các giá trị GUID không tiết lộ thông tin nên chúng an toàn hơn khi sử dụng trong giao diện công khai như URL. Ví dụ: nếu bạn có URL https://www.example.com/customer/100/, không quá khó để tìm ra rằng sẽ có những khách hàng có id 101, 102, v.v. Tuy nhiên với GUID, việc này gần như là không thể: https://www.example.com/customer/F4AB02B7-9D55-483D-9081-CC4E3851E851/

Bên cạnh những ưu điểm này, việc lưu trữ GUID trong cột khóa chính của bảng có những nhược điểm sau:

  • Giá trị GUID (16 byte) chiếm nhiều dung lượng hơn INT (4 byte) hoặc thậm chí BIGINT (8 byte)
  • Các giá trị GUID gây khó khăn cho việc khắc phục sự cố và gỡ lỗi, so sánh WHERE id = 100 với WHERE id = 'F4AB02B7-9D55-483D-9081-CC4E3851E851'.

Ví dụ về GUID của SQL Server

Đầu tiên, tạo một bảng mới có tên customers trong lược đồ marketing:

CREATE SCHEMA marketing;
GO

CREATE TABLE marketing.customers(
    customer_id UNIQUEIDENTIFIER DEFAULT NEWID(),
    first_name NVARCHAR(100) NOT NULL,
    last_name NVARCHAR(100) NOT NULL,
    email VARCHAR(200) NOT NULL
);
GO

Thứ hai, chèn các hàng mới vào bảng marketing.customers:

INSERT INTO 
    marketing.customers(first_name, last_name, email)
VALUES
    ('John','Doe','john.doe@example.com'),
    ('Jane','Doe','jane.doe@example.com');

Thứ ba, truy vấn dữ liệu từ bảng marketing.customers:

SELECT 
    customer_id, 
    first_name, 
    last_name, 
    email
FROM 
    marketing.customers;

Đây là kết quả:

Ví dụ về GUID của SQL Server

Trong hướng dẫn này, bạn đã tìm hiểu về GUID trong SQL Server và cách sử dụng hàm NEWID() để tạo giá trị GUID.

SQL ServerKiểu dữ liệu trong SQL Server
Bài Viết Liên Quan:
Kiểu dữ liệu DATETIMEOFFSET trong SQL Server
Trung Nguyen 12/03/2022
Kiểu dữ liệu DATETIMEOFFSET trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATETIMEOFFSET trong SQL Server để thao tác datetime với múi giờ.

Kiểu dữ liệu TIME trong SQL Server
Trung Nguyen 12/03/2022
Kiểu dữ liệu TIME trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách lưu trữ thời gian trong ngày trong cơ sở dữ liệu bằng cách sử dụng kiểu dữ liệu TIME trong SQL Server.

Kiểu dữ liệu DATE trong SQL Server
Trung Nguyen 12/03/2022
Kiểu dữ liệu DATE trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATE trong SQL Server để lưu trữ dữ liệu ngày tháng trong một bảng.

Kiểu dữ liệu DATETIME2 trong SQL Server
Trung Nguyen 11/03/2022
Kiểu dữ liệu DATETIME2 trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng DATETIME2 trong SQL Server để lưu trữ cả dữ liệu ngày và giờ trong một bảng.