NewGuid ID trong SQL Server là một hàm tạo ra mã số định danh không trùng duy nhất trên toàn thế giới, được sử dụng để tạo ra giá trị khóa chính của 1 bảng ghi, giúp mã đó là duy nhất trong tất cả các table với nhau.
GUID (Globally Unique Identifier) là một giá trị duy nhất trên toàn cầu, có dạng 128-bit (16 byte).
Được biểu diễn dưới dạng chuỗi hexadecimal với 36 ký tự bao gồm dấu gạch ngang (-).
📌 Ví dụ một GUID:
550e8400-e29b-41d4-a716-446655440000
Mỗi GUID được tạo ra sẽ không trùng lặp, ngay cả khi được tạo trên các hệ thống khác nhau.
SQL Server cung cấp hàm NEWID() để tạo một giá trị GUID ngẫu nhiên.
📌 Ví dụ:
SELECT NEWID();
🔹 Kết quả (mỗi lần chạy sẽ khác nhau):
F9E91D89-4E67-4A6D-89E2-6AC98264B5F3
Nếu bạn muốn sử dụng GUID làm Primary Key, có thể khai báo như sau:
CREATE TABLE Customers (
CustomerID UNIQUEIDENTIFIER DEFAULT NEWID(),
Name NVARCHAR(100)
);
📌 Khi chèn dữ liệu mà không truyền CustomerID, SQL Server sẽ tự tạo GUID:
INSERT INTO Customers (Name) VALUES ('Nhật');
SELECT * FROM Customers;
CustomerID Name
4C0A8F8F-9B7D-4E38-AD5E-786EC8E0D72C Nhật
Nếu muốn tự tạo GUID khi chèn dữ liệu:
INSERT INTO Customers (CustomerID, Name)
VALUES (NEWID(), 'John Doe');
🔹 Ưu điểm: ✔ Đảm bảo mỗi bản ghi có một ID duy nhất.
✔ Không bị lỗi trùng lặp như IDENTITY(1,1).
🔹 Nhược điểm: ❌ Không tối ưu cho chỉ mục: Do GUID có tính ngẫu nhiên, nên khi làm Primary Key, index có thể bị phân mảnh.
💡 Giải pháp: Dùng NEWSEQUENTIALID() để giảm phân mảnh index.
Khai báo biến kiểu UNIQUEIDENTIFIER SQL
-- Ví dụ 1:
Declare @KEY_ UNIQUEIDENTIFIER
Set @KEY_ = NEWID()
print @KEY_
-- Ví dụ 2:
Declare @_key_sys nvarchar(50)
Set @_key_sys=LOWER( NEWID() )
print @_key_sys
-- Nếu muốn chuyển chữ thường trong bằng hàm SQL
Không cần khai báo biến
Select LOWER( NEWID() )
LOWER là để chuyển giá trị NewID chữ hoa thành thường
SQL Server cũng hỗ trợ NEWSEQUENTIALID() để tạo GUID theo thứ tự tăng dần, giúp giảm phân mảnh index.
📌 Cách sử dụng:
CREATE TABLE Orders (
OrderID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(),
OrderName NVARCHAR(100)
);
📌 Lưu ý:
NEWSEQUENTIALID() chỉ dùng được trong DEFAULT của cột, không thể gọi trực tiếp trong SELECT.
Tìm kiếm:
NewGuid ID trong SQL Server là một hàm tạo ra mã số định danh không trùng duy nhất trên toàn thế giới, trong lập trình được ứng dụng rất nhiều.