sql 中的主键与标识的区别??
在sql server 中表的主键与标识有没有区别,它们可不可以相互替代???
谢谢!!!
------解决方案--------------------标识列:identity(int,1,1)这样的
标识列可做为主键
主键可以为字符型,只要不重复就行.
主键不可做为标识列.
------解决方案--------------------有,可根据:
标识:
select =name from syscolumns where id=object_id( '表名 ') and status=0x80
主键:
select name from syscolumns where id=object_id( '表名 ') and colid in(
select colid from sysindexkeys where object_id( '表名 ')=id and indid in(
select indid from sysindexes where object_id( '表名 ')=id and name in(
select name from sysobjects where xtype= 'PK ' and parent_obj=object_id( '表名 ')
)))
------解决方案--------------------也可以用显示主键
EXEC sp_fkeys @pktable_name = N '表名 '
------解决方案--------------------=name --去掉=号
------解决方案--------------------标识列:有些情况下可以重复滴,主键不行,因为主键是约束来者
表示列没有索引滴,建主键,是要增加索引页滴
待续。。。
------解决方案--------------------主键要求:1.惟一性;2.非空性。
标识列要求:1.数据类型属于:tinyint、smallint、int、bigint、decimal(p,0) 或 numeric(p,0)之一;2.根据设置的初始值,从该值的基础上按照步长值进行递增。
------解决方案--------------------标识是一种列数据的填充方式,其值只能是整数或小数,而主键却可用其它类型数据
主键是关联中的主体,对本身来说是区别行数据的标识(非上面的标识)它也非空,但建立了索引(一个表只能有一个)
标识对一列而言,主键除一列外还可由多列组合而成,
因为他们在设计时都只能有一个,也可以都没有,往往我们把主键设在标识字段上,所以容易混淆.