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ớiWHERE 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ả:
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.