索引和约束

来源:互联网 发布:美国令人感动的 知乎 编辑:程序博客网 时间:2024/06/11 23:11

一、 虽然索引引用可以提高数据的查询速度,但是任何事物都有双刃剑,它也有一些缺点:

1、 索引会占据一定的磁盘空间,就像有安笔划的查找的目录的书会比没有这种目录的书页数要多一些一样。

2、 索引减慢了数据的插入和删除速度。因为每次删除更新数据都要更新索引,一个表拥有的索引越多则写操作的平均性能下降越大。

二、 索引是针对字段的,因此创建索引的时候需要指定要在那个字段上创建索引,也可以为多个字段创建索引,这样还可以指定一定的索引相关的字段列表,创建索引的语法如下:

Create index 索引名  on 表名(字段1,字段2,字段3.。。。)

删除索引:drop index 表名 索引名

三、 约束:数据库中约束包括以下几种:非空约束,唯一约束,check约束,主键约束和外键约束。

1、 非空约束:非空约束的定义就是在创建表的时候在字段类型后添加not null。   非空约束不仅对插入数据insert语句有作用同样也对update有作用。

2、 唯一约束:唯一约束又称为unique约束,它防止一个特定的列中两个记录具有一致的值。唯一约束分为但字段唯一约束和复合唯一约束两种类型:

如果希望一个字段在表中的值是唯一的那么就可以讲唯一约束设置的这个字段上,设置唯一约束只要在字段后类型后加unique就行了。

复合唯一约束:复合唯一约束是建立在多个字段上的约束,被约束的字段不能同时重复。定义复合唯一约束语法如下:

Constraint 约束名称 unique(字段1,字段2,字段3.。。。)

CREATE T ABLE T_Person (FNumber V ARCHAR(20), 

FDepartmentNumber V ARCHAR(20), 

FName V ARCHAR(20),F Age INT , 

CONSTRAINT unic_dep_num UNIQUE(FNumber ,FDepartmentNumber))

在已经存在的表中添加唯一约束:

Alter table 表名 add constraint 约束名称 unique(字段1,字段2.。。。。)

删除已经存在的约束:

Alter talbe 表名 drop constraint 唯一约束名称 

四、 check约束:check约束会检测输入到记录中的值是否满足一个条件,如果不满足这个条件则对数据库做修改不会成功。Check约束对于插入、更新的任何对数据进行变化的操作都进行检测。

CREATE T ABLE T_Person ( 

FNumber V ARCHAR(20),FName V ARCHAR(20), 

F Age INT CHECK(F Age >0), 

FWorkY ear INT CHECK(FWorkY ear>0)) 

除了可以在 CHECK 约束中使用常量表达式之外,还可以在 CHECK 约束中使用函数,CREATE T ABLE T_Person ( 

FNumber V ARCHAR(20) CHECK (LEN(FNumber)>12), 

FName V ARCHAR(20), 

FAge INT CHECK(F Age >0), 

FWorkY ear INT CHECK(FWorkY ear>0))

CHECK 子句中是不能引用其他列的, 如果希望 CHECK 子句中的条件语句中使用其他列,则必须在 CREATE TABLe 语句的末尾使用 CONSTRAINT 关键字定义它。

CONSTRAINT 约束名CHECK(约束条件重新编写上述的 SQL 语句:

CREATE T ABLE T_Person ( 

FNumber V ARCHAR(20), 

FName V ARCHAR(20), 

FAge INT , 

FWorkY ear INT, 

CONSTRAINT ck_1 CHECK(FWorkY ear< FAge))

五、 主键约束:主键必须能够唯一标识一条记录, 也就是主键字段中的值必须是唯一的, 而且不能包含NULL 值。从这种意义上来说,主键约束是 UNIQUE 约束和非空约束的组合。    在 CREA TE T ABLE 语句中定义主键约束非常简单, 和 UNIQUE 约束和非空约束非常类似,只要在字段定义后添加 PRIMARY KEY 关键字即可。

除了这种由单一字段组成的主键之外, 还可以由多个字段来组成主键, 这样的主键被称为复合主键或者联合主键。

CREATE T ABLE T_Person (FNumber V ARCHAR(20), 

FName VARCHAR(20),F Age INT , 

CONSTRAINT pk_1 PRIMARY KEY(FNumber ,FName))

六、外键约束:我们可以在创建表的时候就添加外键约束,其定义方式和复合主键类似,语法如下:FOREIGN KEY  外键字段  REFERENCES  外键表名(外键表的主键字段)

0 0
原创粉丝点击