① 创建唯一索引的sql语句是什么
创建唯一索引的sql语句如下:
CREATE [UNIQUE|CLUSTERED] INDEX INDEX_NAME ON TABLE_NAME(PROPERTY_NAME)
其中UNIQUE和CLUSTERED为可选项,分别是建立唯一索引和聚簇索引。
具体解释为:
UNIQUE:表示此索引的每一个索引值只对应唯一的数据。
CLUSTERED:表示要建立的索引时聚簇索引,即索引项的顺序与表中记录的物理顺序一致的索引组织。
② 索引是不是分为唯一索引和非唯一索引
根据数据库的功能,可以在数据库设计器中创建四种索引:单列索引、唯一索引、主键索引和聚集索引。
1,普通索引
最基本的索引类型,没有唯一性之类的限制。
2,唯一索引
唯一索引是不允许其中任何两行具有相同索引值的索引。
当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在 employee 表中职员的姓 (lname) 上创建了唯一索引,则任何两个员工都不能同姓。
对某个列建立UNIQUE索引后,插入新记录时,数据库管理系统会自动检查新纪录在该列上是否取了重复值,在CREATE TABLE 命令中的UNIQE约束将隐式创建UNIQUE索引。
3,主键索引
简称为主索引,数据库表中一列或列组合(字段)的值唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
提示尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键索引。
4,候选索引
与主索引一样要求字段值的唯一性,并决定了处理记录的顺序。在数据库和自由表中,可以为每个表建立多个候选索引。
5,聚集索引
也称为聚簇索引,在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引, 即如果存在聚集索引,就不能再指定CLUSTERED 关键字。
6,非聚集索引
也叫非簇索引,在非聚集索引中,数据库表中记录的物理顺序与索引顺序可以不相同。一个表中只能有一个聚集索引,但表中的每一列都可以有自己的非聚集索引。如果在表中创建了主键约束,SQL Server将自动为其产生唯一性约束。在创建主键约束时,如果制定CLUSTERED关键字,则将为表产生唯一聚集索引。
(2)sql编号唯一索引扩展阅读:
并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。如果应用程序非常频繁地更新数据或磁盘空间有限,则可能需要限制索引的数量。在表较大时再建立索引,表中的数据越多,索引的优越性越明显。
可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。
参考资料来源:网络-索引
③ SQL SERVER中索引类型包括的三种类型分别是哪三种
三种索引类型分别是:
1、主键索引:不允许具有索引值相同的行,从而禁止重复的索引或键值。系统在创建该索引时检查是否有重复的键值,并在每次使用 INSERT 或 UPDATE 语句添加数据时进行检查。
2、聚集索引:指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况。
3、非聚集索引:索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。非聚集索引的叶层不包含数据页。 相反,叶节点包含索引行。
(3)sql编号唯一索引扩展阅读
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。
例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。
频繁更改的列 这将导致整行移动,因为 SQL Server 必须按物理顺序保留行中的数据值。这一点要特别注意,因为在大数据量事务处理系统中数据是易失的。来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内。
④ 如何创建唯一索引
例如,如果计划频繁查询 employee 表中(其中主键为 emp_id)的身份证号码 (ssn)列,并希望确保身份证号码是唯一的,则可以在 ssn 上创建唯一索引。如果用户为一个以上的雇员输入相同的身份证号码,则数据库将显示错误而且无法保存该表。在创建或修改唯一索引时,可以可设置一个忽略重复键的选项。如果此选项已设置为“是”,当您试图通过添加影响多行的数据来创建重复键(使用 INSERT 语句)时,则不会添加包含重复项的行;如果此选项设置为“否”,则整个插入操作将失败,并且将回滚所有数据。 创建唯一索引 在对象资源管理器中,右键单击表,再单击“设计”。此时,将在表设计器中打开该表。在表设计器菜单上,单击“索引/键”。单击“添加”。“选定的主/唯一键或索引”列表将显示新索引的系统分配名称。在网格中,单击“类型”。从属性右侧的下拉列表中选择“索引”。在“列”下,选择要编制索引的列。最多可选择 16 列。为获得最佳的性能,请只为每个索引选择一列或两列。对于所选的每一列,指定索引是以升序还是以降序来排列此列的值。在网格中,单击“是唯一的”。从属性右侧的下拉列表中选择“是”。如果希望忽略会在唯一索引中创建重复键(用 INSERT 语句)的数据,请选择“忽略重复键”选项并选择“是”。在保存表或关系图时将在数据库中创建该索引。注意:如果单个列在多行中包含 NULL,则无法对该列创建唯一索引。同样,如果列的组合在多行中包含 NULL,则无法对多个列创建唯一索引。在进行索引时,它们都被视为重复值。
⑤ 在sql中建立唯一索引要用到什么保留字
解决方案:
1.必须在TSQL前Set ARITHABORT ON,代码如下
1: Set ARITHABORT ON
2: GO
3: INSERT INTO ta ..
2.在ADO中,你可以这样来写(C#代码)
MyConnection.Execute("SET ARITHABORT ON");
如果以上你都觉得很麻烦或由于一些原因没法更改,你可以尝试修改SQL Server服务器选项
3.exec sp_dboption 'yourdb','ARITHABORT','true'
或者
4.1: ALTER DATABASE yourdb
2: SET ARITHABORT ON
⑥ SQL Server唯一索引和非唯一索引的区别简析
SQL Server创建索引时,可以指定Unique使之成为唯一索引。“唯一”顾名思义,但是两都到底有什么区别呢?因为索引也是一种物理结构,所以还是要从存储和结构上分析。
索引结构分叶级和非叶级,分析时我们要分开来看,这个很重要。
文中涉及的索引行大小计算,参考MSDN估计数据库大小索引部分。
1. 非唯一聚集索引和唯一聚集索引
创建两个测试表,各10000条整数,tb1唯一,tb2非唯一,有1000条为9999的重复值。
view sourceprint?
01.<img onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_402704').style.display='none'; document.getElementById('Code_Open_Image_402704').style.display='inline'; document.getElementById('Code_Open_Text_402704').style.display='inline';"id="Code_Closed_Image_402704"align="top"src=""width="11"height="16"style="display: none;"><img alt="加载中..."title="图片加载中..."src="http://www.it165.net/statics/images/s_nopic.gif"><img onclick="this.style.display='none'; document.getElementById('Code_Open_Text_402704').style.display='none'; getElementById('Code_Closed_Image_402704').style.display='inline'; getElementById('Code_Closed_Text_402704').style.display='inline';"id="Code_Open_Image_402704"style="display: none;"align="top"src=""width="11"height="16"><img alt="加载中..."title="图片加载中..."src="http://www.it165.net/statics/images/s_nopic.gif">Codecreate table tb1
02.(col1int);
03.declare@iint=1
04.while@i<10001
05.begin
06.insert into tb1 values(@i);
07.set@i=@i+1;
08.end;
09.create unique clustered index ucix on tb1 (col1)
10.go
11.-------
12.create table tb2
13.(col2int);
14.declare@iint=1
15.while@i<9001
16.begin
17.insert into tb2 values(@i);
18.set@i=@i+1;
19.end;
20.go
21.insert into tb2 values(9999)
22.go1000;
23.create clustered index cix on tb2 (col2)
24.go
先查询索引的一些基本状况:
发现多出一个UNIQUIFIER,同样叶级也是一样。MSDN说明:
“如果聚集索引不是唯一的索引,SQL Server 将添加在内部生成的值(称为唯一值)以使所有重复键唯一。此四字节的值对于用户不可见。仅当需要使聚集键唯一以用于非聚集索引中时,才添加该值。”
还有UNIQUIFIER不是一个全局自增列,重复记录增加时此值会发生改变,并且它是一个可为null的变长列。
现在来算一算索引行大小:
两个表都是只有一个int型可为NULL的字段,而聚集索引叶级是存储数据本身
叶级是一个4字节的INT列,无变长列,加上3字节的NULL位图,再加上4字节的行头开销:两个表的叶级minSize =4+0+3+4=11
非叶级是一个4字节的INT列,无变长列,加上3字节的NULL位图,加上1字节的行头开销,再加6字节的子页指针:两个表的非叶级minSize=4+0+3+1+6=14
tb1的索引行大小是一致的minSize=maxSize,因为它是唯一的。tb2的索引行大小不一致,有大有小,大的索引行是因为:a)不唯一 b)UNIQUIFIER
唯一标识列增加了2+1*2+4=8字节开销,tb2的min和max相差就是这8字节。
tb2的叶级maxSize=4+8+3+4=19
tb2的非叶级maxSize=4+8+3+1+6=22
小结:非唯一聚集索引为保证索引键值唯一性,会生成UNIQUIFIER与键列一起组成索引键值。同时无论在叶级还是非叶页级,都比唯一索引占用更多存储空间。
⑦ mysql “索引”能重复吗“唯一索引”与“索引”区别是什么
一、使用不同:
主键索引是在创建主键时一起创建的,是基于主键约束而建立的,是不可以为空,也不可以重复。
唯一索是引基于唯一约束而建立的,可以为空不可以重复,主键索引本身就具备了唯一索引的功能。
二、作用不同:
唯一索引的作用跟主键的作用一样。不同的是,在一张表里面只能有一个主键,主键不能为空,唯一索引可以有多个,唯一索引可以有一条记录为空,即保证跟别人不一样就行。
比如学生表,在学校里面一般用学号做主键,身份证则弄成唯一索引;而到了教育局,他们就把身份证号弄成主键,学号换成了唯一索引。
三、定义不同:
普通索引:这是最基本的索引类型,而且它没有唯一性之类的限制。
唯一性索引:这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。
(7)sql编号唯一索引扩展阅读:
要对一个表建立唯一索引,可以使用关键字UNIQUE。对聚簇索引和非聚簇索引都可以使用这个关键字。
例子
CREATE UNIQUE CLUSTERED INDEX myclumn_cindex ON mytable(mycolumn)
其中:CLUSTERED INDEX是用来建立聚簇索引的关键字,此语句的意思是在表mytable上的mycolumn字段上创建一个名为myclumn_cindex的聚簇索引,且为唯一索引。
⑧ 在SQL中,唯一索引是什么哟
这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );