解决SQLserver 错误提示: “新的索引定义与现有索引强制的约束不匹配”

问题描述:无法重新创建索引 'PK_ProductInfos'(约束名称 )新的索引定义与现有索引强制的约束不匹配。(实在着急 直接看错误原因分析

数据库索引: 索引分为 :1.聚集索引 2.非聚集索引

聚集约束:在创建数据表时,如果你把其中一个列设置为“主键”,在创建表成功后,SQL系统会对此表自动生成一个聚集约束【clustered】,聚集索引在表只能存在一个。

问题发生的前提: 如开头所述,此表你设置了一个主键,并且系统自动生成了一个聚集索引,但是你想自己通过 SQL脚本设置一遍。

注意:下述SQL语句

create  clustered index PK_ProductInfos
on  dbo.ProductInfos(Id)
with (
  drop_existing = on 

)

上述脚本语句注释:create     index  PK_ProductInfos on  dbo.ProductInfos(Id)  [ 创建索引最简洁语法格式 ]

clustered(聚集索引),dbo.ProductInfos(Id) 根据那个列创建索引(ID)为依赖列。

with(

drop_existing = on    /   drop_existing = off  /* --drop_existing:表示如果这个索引还在表上就 drop 掉然后在 create 一个新的通常是off

--drop_existing=on:指定要删除并重新生成现有索引,如果指定的索引名称已经存在,可以继续执行成功。
--drop_existing=off:指定不删除和重新生成现有的索引。 如果指定的索引名称已经存在,SQL Server 将显示一个错误。

*/ 

执行结果:(系统报错)

 错误原因分析:

明明是按照标准语法格式执行为什么会发生错误,我们去认真思考一下,我们在给那个列做索引,这个列的特定是什么。

好了,我来给大家统一回复,上述图\脚本中 我们依赖 [id] 新建索引,ID列是我们这个表的主键,是主键约束,具有唯一性,错误提示:“新的索引定义与现有索引强制的约束不匹配”,我们在重新构建索引时只是说明了 聚集索引,并没体现出它的唯一性。 因此我们在书写创建聚集索引的代码时,在 create  xx  clustered,在“xx”这里替换成“unique”,以体现当前表上主键[id]存在的唯一性,我们在重新运行脚本时就不会出错了。

运营结果如下:

 总结:这次问题非常晦涩隐蔽,不仅是SQLserver会出现这类问题,其他数据也会有此类问题,根据错误提示 “强制约束”我们能理解一二,此次问题涉及内容过多,时间有限,只能简单就问题做一解释,后期我还会发布涉及, SQL数据库分区、聚集索引和非聚集索引的区别、详细给大家做一说明。欲知后事如何,请看下集。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值