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')

UniqueIdentifier 数据类型的更多相关文章

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

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

  2. uniqueidentifier 数据类型(转)

     想要产生这种唯一标识的格式的数据: 6F9619FF-8B86-D011-B42D-00C04FC964FF 应该怎么做呢?答: uniqueidentifier 数据类型可存储 16 字节的二进制 ...

  3. Uniqueidentifier数据类型

    一.Uniqueidentifier数据类型 可存储16字节的二进制值 Uniqueidentifier用来存储一个全局唯一标识符,即GUID.GUID是唯一的二进制数:世界上的任何两台计算机都不会生 ...

  4. sql server中的TimeStamp时间戳与UniqueIdentifier数据类型

    TimeStamp SQL Server timestamp 数据类型与时间和日期无关.SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序.实现 timest ...

  5. SqlServer中的数据类型UniqueIdentifier

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

  6. Design6:选择合适的数据类型

    数据库使用Table来存储海量的数据,细分Table结构,数据最终存储在Table Column中,因此,在设计Table Schema时,必须慎重选择Table Column的Data Type,数 ...

  7. Sql Server中常见的数据类型

    转至http://www.cnblogs.com/andy_tigger/archive/2011/08/21/2147745.html bit    整型 bit数据类型是整型,其值只能是0.1或空 ...

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

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

  9. SQL数据类型介绍

    在计算机中数据有两种特征:类型和长度.所谓数据类型就是以数据的表现方式和存储方式来划分的数据的种类.    在SQL Server 中每个变量.参数.表达式等都有数据类型.系统提供的数据类型分为几大类 ...

随机推荐

  1. sed相关

    1 global flag sed 's/xxx/xxx/' inputfile,如果没有带global flag g的话,匹配替换的只是inputfile中的每一行的第一个匹配项.如果带了g的话,才 ...

  2. mysql系列之5.mysql备份恢复

    备份数据: mysqldump #mysqldump -uroot -p123456 test > /test_bak.sql #egrep -v "#|\*|--|^$" ...

  3. 2017-2018-1 20179209《Linux内核原理与分析》第二周作业

    本周课业主要通过分析汇编代码执行情况掌握栈的变化.本人本科时期学过intel 80X86汇编语言,所以有一定基础:在Linux中32位AT&T风格的汇编稍微熟悉就可以明白.所以我学习的重点放在 ...

  4. mooc课程mit 6.00.1x--problem set2解决方法

    PAYING THE MINIMUM 计算每月信用卡最低还款额及剩余应还款额 balance = 4842 #还款额 annualInterestRate = 0.2 #年利息比率 monthlyPa ...

  5. main方法的参数

    敲例子的时候无意中把主方法的参数给落下了,当时没有发现,保存之后就去编译,运行了,通常情况下编译没有错误那胜利就在掌握之中了,没想到这次我竟然在"不一般"的行列中,编译无误,运行出 ...

  6. Java for LeetCode 112 Path Sum

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

  7. promise介绍

    promise简介 Promise的出现,原本是为了解决回调地狱的问题.所有人在讲解Promise时,都会以一个ajax请求为例,此处我们也用一个简单的ajax的例子来带大家看一下Promise是如何 ...

  8. python基础-元组

    操作元组 获取元组中的值 tup1 = ('高数','计算机',2008,2016) tup2 = (1,2,3,4,5,6,7) #和list的一样,同样取下标1,2,3,4的值 print(&qu ...

  9. listen 67

    Pay What You Want May Deter Consumers Music, film and video game makers face a new online, digital w ...

  10. 事件驱动模式--Reactor

    原文:https://www.cnblogs.com/harvyxu/p/7498763.html 1 Reactor模型 Reactor模式是处理并发I/O比较常见的一种模式,用于同步I/O,中心思 ...