UniqueIdentifier 数据类型用于存储GUID的值,占用16Byte。 SQL Server将UniqueIdentifier存储为16字节的二进制数值,Binary(16),按照特定的格式显示,显示的格式是:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中,x是16进制数字,数值范围是从0-9,A-F。由于每个字节存储2个16进制数据,因此,按照存储字节,UniqueIdentifier的格式简写为:4B-2B-2B-2B-6B。使用GUID的好处是:在不同的Server上,实现GUID数值的“唯一”,SQL Server保证GUID的值总是唯一的,只在极少数情况下可能会重复。

在SQL Server中,UniqueIdentifier 列的特性:

  • 系统不会自动为UniqueIdentifier列赋值,必须显式赋值;
  • 使用GUID产生函数 NewID()赋值,产生随机的GUID;
  • NewSequentialID() 函数只能用于表列的Default约束中,产生顺序的GUID;
  • 使用字符串常量赋值,字符串常量的格式是:'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',x是16进制数字,数值范围是从0-9,A-F;
  • UniqueIdentifier 值能够比较大小,能够使用is null 或 is not null 操作符判断是否为NULL;
  • 能够被RowGUIDCol属性标记,使用$ROWGUID 引用具有RowGUIDCol属性的UniqueIdentifier列;

一,对UniqueIdentifier 变量赋值

1,使用NewID() 为UniqueIdentifier赋值,函数NewID() 用于产生随机的GUID数值。

declare @ui uniqueidentifier
set @ui=newid()
select @ui

2,使用字符串赋值,字符串的格式是:‘xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx’

declare @ui uniqueidentifier
set @ui='AA786048-44BB-E511-80E3-F8B156CF6E62'
select @ui

二,创建UniqueIdentifier column

由于UniqueIdentifier 列不是由系统自动赋值,必须显式赋值,可以为UniqueIdentifier列创建Default约束,并使用GUID产生函数赋值。

例如,在Default约束中使用NewID(),为每行数据生成随机的唯一值

CREATE TABLE dbo.myTable_Rand
(ColumnA uniqueidentifier DEFAULT NewID(),ColumnB int,columnC varchar(10)
) 

1,随机的GUID

NewID()函数产生的GUID是唯一的,但是,值的大小是随机的,不是一个始终增加的值(ever-increasing value),SQL Sever 不保证产生的GUID比之前的GUID 大或小。如果将NewID()函数产生GUID作为clustered index key,那么新的数据行插入的位置是随机的,这样将导致Page split ,降低 IO 性能。

最佳的clustered index key 应该是递增的(increase),data type is narrow (narrow),值是unique(unique),不会频繁更新(static),NewID() 产生的GUID满足narrow,unique, static,但是不满足increase,因此不是理想中的clustered index key。

2,有序的GUID

在一台指定的服务器上,NewSequentialId() 产生的GUID是有序的,后产生的GUID比先产生的GUID数值要大,也就是说,该函数产生的GUID值是始终增加(ever-increasing value)的,SQL Sever 保证产生的GUID比之前的GUID 大。NewSequentialID()函数只能用于表列的Default约束中。如果将NewSequentialID() 产生的GUID作为clustered index key,那么Insert会将新的row 将插入到table的末尾,避免 page split,推荐使用NewSequentialID()作为clustered index key。

NewSequentialID()  Creates a GUID that is greater than any GUID previously generated by this function on a specified computer since Windows was started. After restarting Windows, the GUID can start again from a lower range, but is still globally unique. When a GUID column is used as a row identifier, using NEWSEQUENTIALID can be faster than using the NEWID function. This is because the NEWID function causes random activity and uses fewer cached data pages. Using NEWSEQUENTIALID also helps to completely fill the data and index pages.

NEWSEQUENTIALID() can only be used with DEFAULT constraints on table columns of type uniqueidentifier. You can use NEWSEQUENTIALID to generate GUIDs to reduce page splits and random IO at the leaf level of indexes. Each GUID generated by using NEWSEQUENTIALID is unique on that computer.

CREATE TABLE dbo.myTable
(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID(),ColumnB int,columnC varchar(10)
) insert into dbo.myTable(ColumnB,columnC)
values(1,'a'),(2,'c')

转载于:https://www.cnblogs.com/asdyzh/p/9749458.html

UniqueIdentifier 数据类型相关推荐

  1. SQLServer中uniqueidentifier数据类型理解

    uniqueidentifier可以理解为全局唯一标示符(GUID),可以使用newid函数初始化值,将字符串常量转换为如下形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx ...

  2. SQLServer2005中的uniqueidentifier数据类型与NEWID()函数

    uniqueidentifier中文含义"唯一的标识符". uniqueidentifier数据类型是16个字节的二进制值,应具有唯一性,必须与NEWID()函数配合使用. uni ...

  3. UniqueIdentifier 数据类型 和 GUID 生成函数

    UniqueIdentifier 数据类型用于存储GUID的值,占用16Byte. SQL Server将UniqueIdentifier存储为16字节的二进制数值,Binary(16),按照特定的格 ...

  4. uniqueidentifier数据类型详解

    uniqueidentifier数据类型可存储16字节的二进制值,其作用与全局唯一标记符(GUID)一样.GUID是唯一的二进制数:世界上的任何 两台计算机都不会生成重复的GUID值.GUID主要用于 ...

  5. uniqueidentifier数据类型讲解

     uniqueidentifier中文含义"唯一的标识符". uniqueidentifier数据类型是16个字节的二进制值,应具有唯一性,必须与NEWID()函数配合使用. ...

  6. SqlServer中的数据类型UniqueIdentifier

    SqlServer中的数据类型UniqueIdentifier究竟是什么东东? 该类型一般用来做为主键使用,可用SQL语法的newid()来生成一个唯一的值. 我想请问的是,这个值是一个长整型的数据值 ...

  7. 在Sql2005中,向表中插入数据时遇到uniqueidentifier列,如何插入数据?

    在Sql2005中,向表中插入数据时遇到uniqueidentifier列,如何插入数据? 原文 http://blog.csdn.net/quou2002/article/details/59650 ...

  8. 数据库中字段类型对应C#中的数据类型

    数据库 C#程序 int int32 text string bigint int64 binary System.Byte[] bit Boolean char string datetime Sy ...

  9. 数据库中字段类型对应的C#中的数据类型

    数据库中字段类型对应C#中的数据类型: 数据库                 C#程序 int int32 text string bigint int64 binary System.Byte[] ...

最新文章

  1. pku1182(食物链) hdu3047 Zjnu Stadium
  2. 利用CSS实现文本省略效果
  3. sqli-labs(十三)(hpp)
  4. double取值范围 java_Java中float/double取值范围与精度
  5. JS 三级联动 下拉列表
  6. 跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享
  7. 【亚洲微软研究院】带你8篇论文梳理BERT相关模型进展与反思
  8. FTP-学习笔记(1)
  9. 基于树莓派SHT20温湿度采样
  10. 我的框架-Unity3d中的用户数据储存模块UserDB
  11. 如何下载知乎或好看视频
  12. maven引用公共包_maven项目引用外部jar包的方法
  13. uniapp小说阅读
  14. 习丽妞 编程系统 诞生了
  15. 1278 相离的圆(任务调度,贪心)
  16. 在cmd运行java_用cmd运行java时的问题
  17. Python校内实训--第二天星座查询进阶版
  18. LightMap烘焙技巧
  19. 武汉星起航跨境:美元汇率上升,旺季爆单,美国站卖家迎来好消息
  20. Java生成-zipf分布的数据集(自定义倾斜度,用作spark data skew测试)

热门文章

  1. Vue3学习之第四节:setup()中使用watch、watchEffect 函数
  2. DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1
  3. 使用批处理脚本(BAT)调用FFMPEG批量编码视频
  4. jenkins java必装插件_Jenkins(三)安装相关插件
  5. 网络基础知识:FTP命令及应答码
  6. a标签 href和onclick 传递的this区别
  7. 【CCCC】L2-015 互评成绩 (25分),,简单模拟,水题,动态数组排序
  8. 文档服务器archive,文档查询服务器,archive server,音标,读音,翻译,英文例句,英语词典...
  9. linux asm函数,Linux 字符设备驱动—— ioremap() 函数解析
  10. mysql addslashes c_addslashes()用途与php怎样防止mysql注入?