自增主键和GUID主键

------- Windows Phone 7手机开发、 .Net培训、期待与您交流! -------


        主键:主关键字(主键,primary key)是被挑选出来,作表的行的唯一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。 主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。又称主码。并且它可以唯一确定表中的一行数据,或者可以唯一确定一个实体。
      主键约束在表中定义一个主键来唯一确定表中每一行数据的标识符.主键列的数据类型不限,但此列必须是唯一并且非空。也就是说定义为主键的列是唯一标识一行的关键字,在删除或更新等操作指定的记录的时候可以通过主键来唯一标识,就相当于每个人都有一个身份证号码,要找某个指定的人只需找到他的身份证号码是指定人的身份证号码即可。主键也不能为空,因为为空就没有意义了,它怎么来唯一标识呢?所以当插入一条数据的时候若主键字段有重复或为空那就就触犯了主键约束,DBMS会报错阻止数据插入。

       一个表中只能设一个主键,当然可以设复合主键,就是多列合成的一个主键,但最终还是一个主键。前面说到主键列的类型不限,但有种情况是不可以设主键的就是varchar(MAX)等可变长列为MAX的。这时候设置主键选项为灰色。


一般用来做主键的类型有int、bigint或uniqueidentifier(即GUID),用int或bigint做主键的好处是可以设置自增列,在标识范围中将是标识选为是,设定标识种子和增量即可达到主键自增的目的。这样,在插入数据时无需对主键列进行插入即可自动按标识增量进行自增,使得主键一目了然。自增列的好处还有可以避免并发冲突,sql server会在内部控制多台计算机同时插入数据的并发问题。



接下来说GUID主键,微软VS自带了GUID生成器,开始菜单->程序->Microshft Visual Studio->Microsoft Windows SDK tools->GUID生成器。



在点击新建GUID按钮每次生成的GUID都不一样,每次生成的都不会重复。不用有浪费的感觉,GUID的生成是取之不尽用之不竭的,呵呵。为什么GUID不会重复呢,GUID的生成算法包括使用网卡MAC地址、纳秒级时间、芯片ID码等算出来的,这样保证每次生成的GUID永远不会重复,无论是同一台计算机还是不同的计算机。在公元3400年以前产生的GUID与任何其他产生过的GUID都不会相同。

       在sql 语句中生成GUID的方法是  Selecte newid(),而在C#中生成GUID则是   Guid id=Guid.NewGuid(); 其中id就是生成的GUID。

       int自增和GUID主键有那些区别呢,首先int自增主键的优点是占用空间小、无序开发人员干预、易读;缺点是效率低,速度比较慢。而GUID主键的优点是效率高、数据导入导出方便;缺点是占用空间大、不易读。但总的来说业界更倾向于Guid,数据量多的话,效率是很重要的。

------- Windows Phone 7手机开发、.Net培训、期待与您交流! ------  详细请查看:http://net.itheima.com

你可能感兴趣的:(黑马学习日记)