在 SQL Server 中,
NEWSEQUENTIALID()
函数用于生成一个新的、不重复的 GUID(全局唯一标识符)。与
NEWID()
不同的是,
NEWSEQUENTIALID()
函数生成的 GUID 按照顺序递增,并且不会有碰撞,因此可以更高效地用于数据库索引的构建。
NEWSEQUENTIALID()
函数的语法非常简单,如下所示:
NEWSEQUENTIALID()
NEWSEQUENTIALID()
函数主要适用于以下场景:
用于数据库表的主键或唯一标识符,可以替代自增长字段。
用于高并发环境下的数据插入操作,可以避免 GUID 的随机性带来的频繁的索引分裂。
示例 1:创建表格并插入数据
下面的示例演示了如何使用 NEWSEQUENTIALID()
函数创建一个名为 Person
的表格,并插入一些样例数据:
CREATE TABLE Person
Id UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() NOT NULL,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Email VARCHAR(50) NOT NULL,
CONSTRAINT PK_Person PRIMARY KEY CLUSTERED (Id)
INSERT INTO Person (FirstName, LastName, Email)
VALUES ('John', 'Doe', '[email protected]'),
('Jane', 'Doe', '[email protected]'),
('Bob', 'Smith', '[email protected]')
执行上述脚本后,我们可以查看 Person
表格的数据,如下所示:
FirstName
LastName
Email
可以看到,每个插入的记录都使用了 NEWSEQUENTIALID()
函数生成的 GUID 作为主键。
示例 2:使用 NEWSEQUENTIALID() 作为主键
如果您需要为表格生成一个唯一的主键,并且希望按时间顺序插入记录,那么 NEWSEQUENTIALID() 函数非常适合。下面是一个示例,展示如何创建一个具有唯一主键的表格,并使用 NEWSEQUENTIALID() 函数插入记录:
CREATE TABLE Employee (
EmployeeID uniqueidentifier DEFAULT NEWSEQUENTIALID(),
FirstName varchar(50),
LastName varchar(50),
Email varchar(50),
HireDate date
INSERT INTO Employee (FirstName, LastName, Email, HireDate)
VALUES ('John', 'Doe', '[email protected]', '2022-01-01'),
('Jane', 'Doe', '[email protected]', '2022-01-15'),
('Bob', 'Smith', '[email protected]', '2022-02-01');
在这个示例中,我们创建了一个名为 Employee
的表格,并使用 NEWSEQUENTIALID()
函数为 EmployeeID
列生成唯一的主键。在插入记录时,我们没有为 EmployeeID
列指定任何值,因为它会自动使用 NEWSEQUENTIALID()
函数生成唯一值。在查询 Employee
表格时,您会注意到 EmployeeID 列的值是按时间顺序排序的。
NEWSEQUENTIALID()
函数是一个非常有用的函数,它可以为您的表格生成唯一的、按时间顺序排序的 GUID 值。这使得 NEWSEQUENTIALID()
函数非常适合用作主键,特别是在具有高写入负载的情况下。但请注意,NEWSEQUENTIALID()
函数只在 Windows 平台上受支持。如果您需要在非 Windows 平台上使用类似的功能,可以考虑使用其他的 GUID 生成器,例如 UUID-OSSP。