• 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 ('表名')
  • 相关阅读:
    [LeetCode 116 117]
    看几道JQuery试题后总结(下篇)
    插入排序及其扩展
    Operation not permitted引发的惊魂72小时
    dddd
    天底下什么人都有,不要跟他们一般见识就是了
    qt宽字符串中文乱码(codec->toUnicode值得学习)
    qt事件传递过程和处理
    qt新进程工作目录的设置(工作目录确实是被子进程继承的,但也可以设置)
    面试都爱问的委托和事件(纠正)
  • 原文地址:https://www.cnblogs.com/shadow-fei/p/3543111.html
Copyright © 2020-2023  润新知