奇怪,不是主键也可以被参照!

javaflyers 2004-12-01 12:03:31
UNIQUE约束和UNIQUE索引有什么区别?
比如这2句:
alter table t1 add constraint u_c unique(C1)

create unique index u_i on t1(C1)
-------------------------
例子:
use tempdb
create table t1(
c1 int,c2 int
)
alter table t1 add constraint u_c unique(C1)

create unique index u_i on t1(C2)
---下面是外键
create table t2(
c1 int foreign key references t1(c1)

)
create table t3(
c2 int foreign key references t1(c2)
)


关系理论因为SQL SERVER的约束而被推翻了!

其一、不是主键也可以被外键参照。
二、现在,被参照的字段可以为空,而且外键也可以为空。
我们以前认为的主键和外键不能为空的理论全被推翻了!

有没有高手来解释一下!
...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaflyers 2004-12-02
  • 打赏
  • 举报
回复
嗨。。。。是不是太高深了
pbsql 2004-12-01
  • 打赏
  • 举报
回复
这是帮助上的:
SQL Server 自动创建 UNIQUE 索引来强制 UNIQUE 约束的唯一性要求。因此,如果试图插入重复行,SQL Server 将返回错误信息,说明该操作违反了 UNIQUE 约束并不将该行添加到表中。除非明确指定了聚集索引,否则,默认情况下创建唯一的非聚集索引以强制 UNIQUE 约束。

也就是说:在创建UNIQUE约束和UNIQUE索引时,SQL SERVER 2000 都会创建唯一索引,创建UNIQUE约束时不会创建成普通的check
javaflyers 2004-12-01
  • 打赏
  • 举报
回复
是啊,所以感觉疑惑,不知道ORACLE和其它数据库是不是这样
pbsql 2004-12-01
  • 打赏
  • 举报
回复
实际上它们都是索引,但是在企业管理器中可以看到有个属性(约束或索引)来区分它们,具体不知道有什么区别,功能似乎都一样
javaflyers 2004-12-01
  • 打赏
  • 举报
回复
这么说UNIQUE约束和UNIQUE索引没有区别了?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧