如何创建唯一索引

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建唯一索引相关的知识,希望对你有一定的参考价值。

例如,如果计划频繁查询 employee 表中(其中主键为 emp_id)的身份证号码 (ssn)列,并希望确保身份证号码是唯一的,则可以在 ssn 上创建唯一索引。如果用户为一个以上的雇员输入相同的身份证号码,则数据库将显示错误而且无法保存该表。在创建或修改唯一索引时,可以可设置一个忽略重复键的选项。如果此选项已设置为“是”,当您试图通过添加影响多行的数据来创建重复键(使用 INSERT 语句)时,则不会添加包含重复项的行;如果此选项设置为“否”,则整个插入操作将失败,并且将回滚所有数据。 创建唯一索引 在对象资源管理器中,右键单击表,再单击“设计”。此时,将在表设计器中打开该表。在表设计器菜单上,单击“索引/键”。单击“添加”。“选定的主/唯一键或索引”列表将显示新索引的系统分配名称。在网格中,单击“类型”。从属性右侧的下拉列表中选择“索引”。在“列”下,选择要编制索引的列。最多可选择 16 列。为获得最佳的性能,请只为每个索引选择一列或两列。对于所选的每一列,指定索引是以升序还是以降序来排列此列的值。在网格中,单击“是唯一的”。从属性右侧的下拉列表中选择“是”。如果希望忽略会在唯一索引中创建重复键(用 INSERT 语句)的数据,请选择“忽略重复键”选项并选择“是”。在保存表或关系图时将在数据库中创建该索引。注意:如果单个列在多行中包含 NULL,则无法对该列创建唯一索引。同样,如果列的组合在多行中包含 NULL,则无法对多个列创建唯一索引。在进行索引时,它们都被视为重复值。 参考技术A

以sqlserver为例,创建唯一索引的语法如下:

CREATE UNIQUE CLUSTERED INDEX 索引名 ON 表名(字段名);

如,为test表中的id字段创建唯一索引:

CREATE UNIQUE CLUSTERED INDEX u_id ON test(id);

唯一索引概念:

唯一索引,一种索引,不允许具有索引值相同的行,从而禁止重复的索引或键值。系统在创建该索引时检查是否有重复的键值,并在每次使用 INSERT 或 UPDATE 语句添加数据时进行检查。

参考技术B sql语句创建唯一索引的方法:
1、在sql server数据库中:
CREATE UNIQUE INDEX AK_UnitMeasure_Name
ON Production.UnitMeasure (Name);
GO

2、在oracle中床创建
CREATE unique INDEX 索引名 ON 表名 (列名)
TABLESPACE 表空间名;

没索引oracle无唯一索引交换分区会丢失数据?

参考技术A 重新创建索引:

使用以下选项可缩短创建索引所花费的时间:

PARALLEL NOLOGGING

PARALLEL(NOPARALLEL 是默认值):多个进程可以同时协同工作来创建索引。与单个服务器进程按顺序创建索引相比,通过在多个服务器进程之间分配创建索引所需的工作,Oracle 服务器可以更快速地创建索引。将随机对表取样并找到一组索引关键字,这些索引关键字按照指定的并行度将索引平均分为相同数目的片段。第一组查询进程将扫描表,提取关键字、行 ID 对并基于关键字将每个对发送到第二组查询进程中的一个进程中。第二组中的每个进程都对关键字进行排序并按常规方式构建索引。所有索引片段构建完成后,并行协调程序会将这些片段(已进行排序)级联以形成最终的索引。

SQL> CREATE INDEX rname_idx

ON hr.regions (region_name)

PARALLEL 4;

NOLOGGING:使用此关键字会加快索引的创建速度,因为创建进程创建的重做日志 条目极少。这种工作量大幅减小的重做生

成也适用于直接路径插入和 Direct Loader (SQL*Loader) 插入。这是永久性属性,因此将显示在数据字典中。可以随时使用

ALTER INDEX NOLOGGING/LOGGING 命令来加以更新。

注:若数据库在nologging状态时,所操作的数据应该备份,再将nologging改回来,以免重大失误难以恢复

丢失了索引表空间后进行恢复:

索引丢失时,更为快速、简单的方法是重新创建而不是尝试恢复索引。

索引是计算得到的对象,因为它们不提供任何原始数据,只是已存在数据的另一表示形式。因此,在大多数情况下,可以很容易地重新创建索引。

如果您的表空间仅包含索引,则可以简化在丢失了属于该表空间的数据文件后的恢复工作。

如果丢失了此类数据文件,则可以

执行以下步骤:

1.删除数据文件。

2.删除表空间。

3.重新创建索引表空间。

4.重新创建包含在表空间中的索引。

1.可以在不执行 RECOVER 任务的情况下恢复仅包含索引的表空间。

2.如果属于仅包含索引的表空间的数据文件丢失,则更为简单的方法可能是重新创建表空间和重新创建索引。

实验:索引表空间数据文件丢失

1.创建实验数据;

以上是关于如何创建唯一索引的主要内容,如果未能解决你的问题,请参考以下文章

如何解决Oracle“不能创建唯一索引,发现重复记录”问题

如何解决Oracle“不能创建唯一索引,发现重复记录”问题

Oracle数据库主键约束与唯一索引有啥区别?

如何在 NULL 列上创建唯一索引?

MySQL InnoDB表创建联合唯一索引出错?

mysql 主键索引和唯一索引的区别