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