SQL GUID之 NEWID()、NEWSEQUENTIALID()、UUID()、UUID_SHORT() - 全局通用唯一标识符

SQL GUID之 NEWID()、NEWSEQUENTIALID()、UUID()、UUID_SHORT() - 全局通用唯一标识符

1、MS SQL

创建 uniqueidentifier 类型的唯一值。

1)、NEWID()

select NEWID()   --返回值示例:C5848**D-1*98-4D*7-*7D8-E**A462**324
select CONVERT(varchar(255), NEWID())  

示例:随机抽取10条数据

select top 10 * from table order by  newid()

2)、NEWSEQUENTIALID()    //NEWSEQUENTIALID() 只能与 uniqueidentifier 类型表列上的 DEFAULT 约束一起使用。

CREATE TABLE 表1 (字段1 uniqueidentifier DEFAULT NEWSEQUENTIALID());
  • 不能在查询中引用 NEWSEQUENTIALID
  • 可以使用 NEWSEQUENTIALID 生成 GUID 以减少叶级别索引上的页拆分和随机 IO。
  • 使用 NEWSEQUENTIALID 生成的每个 GUID 在该计算机上都是唯一的。 仅当源计算机具有网卡时,使用 NEWSEQUENTIALID 生成的 GUID 在多台计算机上才是唯一的。

3)、NEWID()函数 和 NEWSEQUENTIALID() 函数 对比:

  • 使用 NEWSEQUENTIALID 可能比使用 NEWID 函数的速度更快。 其原因在于,NEWID 函数导致随机行为并且使用更少的缓存数据页。 使用 NEWSEQUENTIALID 还有助于完全填充数据和索引页。
  • NEWSEQUENTIALID 是 Windows UuidCreateSequential 函数的包装器,应用了某种字节随机排列。
  • UuidCreateSequential 函数具有硬件依赖关系。

4)、uniqueidentifier 数据类型

uniqueidentifier 数据类型的列或局部变量可通过以下方式初始化为一个值 :

  • 通过使用 NEWID 或 NEWSEQUENTIALID 函数。
  • 通过从 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 形式的字符串常量进行转换,其中,每个 x 都是 0-9 或 a-f 范围内的十六进制数字。 例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 为有效的 uniqueidentifier 值 。

比较运算符可与 uniqueidentifier 值一起使用 。 不过,排序不是通过比较两个值的位模式来实现的。 可针对 uniqueidentifier 值执行的运算只有比较运算(<>、<、>、<=、>=)以及检查是否为 NULL(IS NULL 和 IS NOT NULL)。 不能使用其他算术运算符。 除 IDENTITY 之外的所有列约束和属性均可对 uniqueidentifier 数据类型使用 。
具有更新订阅的合并复制和事务复制使用 uniqueidentifier 列来确保在表的多个副本中唯一地标识行 。

 

 2、MySQL

SELECT UUID()  --生成32位,“-”分隔 ,例如:1**46fc*-f**7-11**-b**f-1*9**6a3***e
SELECT UUID_SHORT()   --生成17位,例如:2**27**5921***656
SELECT REPLACE(UUID(),'-','')  --不带横线分隔方式

  

  

 

 

 

创建时间:2022.07.04  更新时间:

posted on 2022-07-04 09:07  滔Roy  阅读(580)  评论(0编辑  收藏  举报

导航