以前数据库的标识列一直都是自己手动编写的,虽然考虑到了很多的因素,但最后还是难以避免出现这样那样的问题,今天看到GUID,作为唯一标识列,它确实是不错的选择,当然了,这个还是要根据业务需求了.
我先说下什么是GUID
GUID是由当前网卡id和当前计算机CPU指针时间共同组成的一串字符,该字符有16个字节,任何时间段的两台计算机都无法出现相同的GUID,所以使用GUID来作为唯一标识列,我们就不用担心key重复的问题.
当然,有人会发现,使用GUID来作为key的话,这样会暂用数据库的内存,是的,相对于自增长列来说,这确实会加大使用数据库的内存,这也是GUID的一个弊端;
同时,GUID还有一个弊端,也是我个人比较在意的一点,GUID会降低数据库的查询效率,所以我个人建议,使用GUID时,最好配合其他列的索引来使用.以便改善GUID的这一弊端
上面是它存在的弊端,有人可能会问,既然有这样的弊端为何还要使用GUID呢,自增长列同样可以使用啊.这话相对来说是没有问题的,ok,下面我来解释下GUID的相对优势,GUID的好处在于,第一,使用方便,无论是使用SQL还是T-SQL,GUID的使用方法都比较简单;第二:GUID有预知标识列的功能,有部分业务可能会让我提前得到即将insert到数据库中的唯一标识列.就这一点来说,GUID极大方便的做到了这一点.这也是我使用它的一个重要原因.
ok,说了这么多了,我们来看看T-SQL中,GUID是如何获取到的吧.CODE也是相当简单
Guid g = Guid.NewGuid(); string guid = g.toString();
简单的两句话便可得到你想要的guid了...例:61995c9e-5fcf-4b2e-acd3-1b16bc83c4bf;是不是有点像注册码?当然了,这个是可以用于注册码的.这里的预知便起到了作用.
下面我说下SQL中的用法
CREATE TABLE EXPMONTER ( ExId uniqueidentifier default(NewID()), DayTime varchar(15) default(getdate()) ) GO
关键字 UNIQUEIDENTIFIER ,sql中优函数NewID()可以调用GUID,一般不填写时建议采用默认数据.这里就是简单的GUID的使用.后续还会研究其具体做法,还有查询速度等问题.