SQLServer基础(五)

第六章、索引与约束
6.1、索引:像字典的按笔画查找的目录。
     缺点:占空间、减慢数据插入和删除
     创建:create index 索引名 on 表名(字段1,字段2,...)
          create index idx_person_nameage on T_Person(FName,FAge)
          drop index idx_person_nameage ;
6.2、约束
     约束:非空约束;唯一约束;check约束;主键约束;外键约束。
6.2.1、非空约束
     create table T_person(FNumber varchar(20) not null,FName varchar(20),FAge Number(10))
6.2.2、唯一约束
     唯一约束,another name :unique(字段在表中不能重复)
     create table T_Person(FNumber varchar(20) unique,Fname varchar(20),FAge int)
     但不能实现字段A重复,字段B重复,但AB不能同时重复。所以出现
     复合唯一约束
     constraint 约束名 unique (字段1,字段2,...) 
     create table T_Person(FNumber varchar(20), FDepartmentNumber varchar(20),Fname varchar(20), FAge int,constraint uniq_dep_num unique(FNumber,FDepartmentNumber))
     添加与删除约束
     alter table 表名 add constraint 唯一约束名 unique(字段1,字段2,..)
     alter table 表名 drop constraint 唯一约束名
6.2.3、check约束
     check约束会检查输入到记录中的值是否满足一个条件(年龄不能为负数)
     create table T_Person(FNumber varchar(20),FName varchar(20),FAge int check(FAge>0),FWorkYear int check(FWorkYear>0))
     人员编号长度大于12:check(len(FNumber)>12)
     but, check子句缺点是约束条件不能引用其他列(年龄=现在-出生年)
     but,我们可以用constraint 关键字:constraint 约束名 check (约束条件)
     create table T_Person(Fnumber varchar(20),FName varchar(20),FAge int,FWorkYear int,constraint ck_age_work check(FAge>FworkYear))
     添加与删除check
     alter table T_Person add constraint ck_2 check(FAge>2)
     alter table T_Person drop constraint ck_2
6.2.4、主键约束
     主键,唯一标识一条记录,唯一不为空,主键=非空+unique;
     create table T_Person(FNumber varchar(20) primary key,FName varchar(20))
     复合主键
     create table T_Person(FNumber varchar(20),Fname varchar(20),FAge int ,constraint pk_1 primary key(FNumber,FName)
     添加与删除主键:alter组合主键的字段必须包含not null约束(建表的时候该字段非空约束)。
     alter table T_Person add constraint pk_1 primary key (FNumber,FName)
     alter table T_Person drop constraint pk_1;
6.2.5、外键约束
     两个表之间的约束:foreign key(自己表要约束的字段) references 约束自己的表(其表的字段)
     table T_Author(FId primary key,FName,FAge,FEmail)
     create table T_Book (FId primary key,FName,FPageCount,FAuthorIDforeign key(FAuthorID) references T_Author(FId)
     如果想在建表的时候就定义外键名称,只需加上:constraint 外键名 foreign key
     create table T_Book (FId primary key,FName,FPageCount,FAuthorIDconstraint forkey_auID_id foreign key(FAuthorID) references T_Author(FId)
     添加与删除外键:alter
     alter table T_Book add constraint fk_book_author foreign key(FAuthorID) references T_Author(FId)
     如何查看外键名称:
     select name  
from  sys.foreign_key_columns f join sys.objects o on f.constraint_object_id= o.object_id
where f. parent_object_id=object_id ('表名')
原文地址:https://www.cnblogs.com/shadow-fei/p/3543111.html