zoukankan      html  css  js  c++  java
  • 约束Constraints

    基本

    目的:为了防止数据库存在不符合语义的数据,防止错误信息的输入和输出
    约束的用途是限制用户输入到表中的数据的值的范围

    分类

    分类1:列级约束、表级约束两种
    分类2:
    NOT NULL
    UNIQUE
    PRIMARY KEY
    FOREIGN KEY
    CHECK
    DEFAULT

    创建约束

    primary key 约束

    特征:
    a、创建primary key约束时,SQL Server会自动创建一个唯一的聚集索引;
    b、定义了primary key约束的字段的取值不能重复,并且不能取null值;
    c、每个表只能定义一个primary key约束;
    d、如果表中已经有了聚集索引,那么在创建primary key约束之前,要么指定所创建的是非聚集索引,要么删除已有的聚集索引
    例 1 创建表级primary key约束。

    create table 学生表(
        学号  char(8)  not null,
        姓名 char(8) null,
    constraint  pk_学生表  primary key  (学号));
    

    例 2 创建列级primary key 约束

    create table 学生表(
        学号 char(8)  not null,
    constraint pk_学号 primary key nonclustered(学号),
        姓名  char(8) null);
    

    Foreign Key约束

    外键约束会影响插入和删除性能
    特征:
    a、一旦Foreign Key约束定义了某个字段,则该字段的取值必须参照(Reference)同一表或另一表中的Primary Key约束或Unique约束。
    b、Foreign Key约束不能自动建立索引。
    例 3

    create table  成绩表1(
        学号 char(8) not null constraintpk_no references 学生表(学号),
        成绩 int);
    

    default 约束 默认值约束

    特征:
    a.每一个字段只能有一个Default约束;
    b.default约束不能放在IDENTITY字段上或者timestamp字段上。
    例 4

    alter  table 成绩表
           add constraint df_成绩 default 0 for 成绩
    

    例 5

    create  table 成绩表2(
             学号 char(8) not null,
              课程代码 char(7) not null,
              成绩 float constraint  df_score default 0.00);
    

    Unique约束(用于不是主键但又要求不能有重复值出现的字段)

    特征:
    a.一个表可以有多个Unique 约束;
    b. 按照Unique约束的要求,在一个表中不允许受约束列的字段上有相同的null值,因此最好将被定义了Unique约束的列定义为非空(允许被约束列的值为空)
    c.创建Unique约束时,系统自动创建了非聚集索引。
    例 6

    alter table 学生表
             add constraint un_name unique(姓名)
    

    例 7

    create table abc(
              学号 char(8) not null  constraint un_no unique,
              姓名 char(8));
    

    例 8

    create table cbd(
                      学号 char(8) not null,
                      姓名 char(8),
                      constraint  un_xh unique(学号));
    

    Check约束

    特征:
    a.限制了向特定的字段列输入数据的类型;
    b.表级定义的Check约束可以对多个字段列进行核查。
    例 9

    create table efg(
                学号 char(8)not null,
                姓名 char(8) not null,
                年龄 int,
               constraint  chk_age check (年龄>17 and 年龄<25));
    

    例10

    create table  efg1(
               学号 char(8) not null,
               姓名 char(8) not null,
              年龄 int constraint chk_age1 check(年龄>17 and 年龄<25));
    

    (6)空值约束

    删除约束

    如果需要将某个约束删除,可以使用alter table约束,其语法格式是:

    alter table 表名
    drop constraint 约束名
    

    转载自:http://blog.csdn.net/zpf336/article/details/42402387

  • 相关阅读:
    Java学习笔记_180706_接口实现、类继承、多态、转型
    poj 1279 求半平面交的 面积(推荐)
    半平面交 模板 poj 3335 poj 3130 poj 1474 判断半平面交是否为空集
    高斯消元 zoj 3645 poj 1222/XOR消元
    向量旋转专题
    hdu 1524 A Chess Game SG函数(有向无环图-拓扑图)博弈 (二维) + dfs(模板)
    HDOJ1079&POJ1082&ZOJ1024 Calendar Game [找规律博弈]
    转 博弈类题目小结(hdu,poj,zoj)
    poj 3080 get_next + kmp + 字符数组做函数参数 + 数组下标从1 开始
    poj Area 1265 求面积+ 多边形边上的点的个数+ 多边形内点个数
  • 原文地址:https://www.cnblogs.com/Lulus/p/7874414.html
Copyright © 2011-2022 走看看