什么是 唯一索引 ?(50)

  • 主题发起人 主题发起人 星幻子
  • 开始时间 开始时间

星幻子

Unregistered / Unconfirmed
GUEST, unregistred user!
我看了人家提的一问题,说是如何让数据不得出现重复最后他说 用 唯一索引 解决问题了我比较菜不知道 这个 唯一索引 在哪弄?各位可否高知?目前我的表有主键设为自动编号了
 
你有主键并是自增那就不用唯一索引了。
 
Create Unique Index 索引名称 On 数据表(字段1,字段2)有的时候虽然设置了主键,但可能还需要闲置一些其它字段唯一,这时候就需要对那些字段设置为唯一索引。
 
主键默认就是唯一约束,首先要看你的是什么数据库,不同的数据库,设置不一样。SQL Server 2008 联机丛书(2009 年 1 月)创建唯一索引创建唯一索引可以确保任何生成重复键值的尝试都会失败。创建 UNIQUE 约束和创建与约束无关的唯一索引并没有明显的区别。进行数据验证的方式相同,而且对于唯一索引是由约束创建的还是手动创建的,查询优化器并不加以区分。但是,在进行数据集成时,应当对列创建 UNIQUE 约束。这可以使索引的目的更加明晰。 典型实现 惟一索引可通过以下方式实现:PRIMARY KEY 或 UNIQUE 约束在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。主键列不允许空值。在创建 UNIQUE 约束时,默认情况下将创建唯一非聚集索引,以便强制 UNIQUE 约束。如果不存在该表的聚集索引,则可以指定唯一聚集索引。有关详细信息,请参阅 PRIMARY KEY 约束和 UNIQUE 约束。独立于约束的索引可以为一个表定义多个唯一非聚集索引。有关详细信息,请参阅 CREATE INDEX (Transact-SQL)。索引视图若要创建索引视图,请对一个或多个视图列定义唯一聚集索引。视图的执行(具体化)和结果集的存储都是在索引叶级别进行的。结果集的存储方式与表数据在聚集索引中的存储方式相同。有关详细信息,请参阅创建索引视图。 解决重复值问题 如果在键列中存在重复值,将无法创建唯一索引或约束。例如,如果要对 FirstName 列和 LastName 列创建唯一组合索引,但是表中有两行数据在 FirstName 和 LastName 列中的值均为 'Jane' 和 'Smith',则这种情况下将无法创建唯一索引。要解决此问题,可以使用下列方法之一:在索引定义中添加或删除列以创建唯一组合。在前面的例子中,向索引定义中添加 MiddleName 列可以解决重复问题。如果重复值是因数据输入错误引起的,则可以先手动更正数据,然后创建索引或约束。 使用 IGNORE_DUP_KEY 选项来处理重复值。 在创建或修改唯一索引或约束时,可以将 IGNORE_DUP_KEY 选项设置为 ON 或 OFF。此选项指定在插入操作试图向唯一索引中插入重复键值时的错误响应。IGNORE_DUP_KEY 选项仅适用于创建或重新生成索引后发生的插入操作。在执行 CREATE INDEX、ALTER INDEX 或 UPDATE 时,该选项不起作用。默认值为 OFF。ON向唯一索引中插入重复键值时将出现一条警告消息。只有违反唯一性约束的行才将失败。OFF向唯一索引中插入重复键值时将出现一条错误消息。整个 INSERT 操作将被回滚。例如,如果一个语句向某个具有唯一索引的表中插入 20 行,而其中 10 行含有重复键值,则默认情况下全部 20 行都将被拒绝。但是,如果索引选项 IGNORE_DUP_KEY 为 ON,则只有 10 个重复键值会被拒绝,其他 10 个非重复键值将插入到表中。对于对视图创建的索引、非唯一索引、XML 索引、空间索引以及筛选索引,IGNORE_DUP_KEY 不能为 ON。若要查看 IGNORE_DUP_KEY,请使用 sys.indexes。在向后兼容的语法中,WITH IGNORE_DUP_KEY 等效于 WITH IGNORE_DUP_KEY = ON。 处理 NULL 值 为了利于创建索引,NULL 值与 NULL 值的比较结果为相等。因此,如果不止一行中的键值为 NULL,则不能创建唯一索引或 UNIQUE 约束,当为唯一索引或唯一约束选择列时,请选择定义为 NOT NULL 的列。
 
多人接受答案了。
 
后退
顶部