1.创建表

创建表:
1.主键(primary key)
2.唯一键(unique)
3.检查约束(check)
4.默认值(default)
5.外键(foreign)
6.空值检查(NULL)

在 SQL Server 2008 中,每个数据库最多可包含 20 亿个表。一个表中最多可以包含 30,000 个列,其中最多有 1024 个非稀疏列和计算列。表的行数及总大小仅受可用存储空间的限制。每行最多包括 8,060 个字节。对于带 varchar、nvarchar、varbinary 或 sql_variant 列(导致已定义表的总宽超过 8,060 字节)的表,此限制将放宽。其中每列的长度仍必须在 8,000 字节的限制内,但是它们的总宽可能超过表的 8,060 字节的限制。有关详细信息,请参阅行溢出数据超过 8 KB。

每个表最多可以有 999 个非聚集索引和 1 个聚集索引。其中包括为支持表中所定义的 PRIMARY KEY 和 UNIQUE 约束而生成的索引。


重复怎么办?
年龄写成负数怎么办?
手机号码少写一位怎么办?
邮箱地址不合法怎么办?


一.主键:--确保数据唯一
    用来唯一确定表中记录的标识符,其值不能为空,也不能重复。
    一个表只能有一个主键,并且自动建立聚焦索引。
    格式:constraint pk_sno primary key clustered(sno)

    第一种:--不推荐使用第一种,因为主键名会随机生成,将来影响操作。
    create table Customer
    (
        cno int primary key
        cname char(10)
    )
    第二种:
        create table Customer
        (
            cno int constraint pk01_cno primary key clustered(cno)
            cname char(10)
        )
    第三种方法:
        create table Customer
        (
            cno int
            cname char(10)
            constraint pk02_cno primary key clustered(cno)
        )
    添加字段:
    alter table Customer
    add cmobil char(11)

    校验:
    inset into

    复合主键:

    格式:constraint pk_sno primary key clustered(n1,n2)
    比如借书表
    管理主键:
        1.查看主键信息:
            select * from sys.objects where type='PK'
        2.为已存在的表添加主键:
            Alter Table Customer constraint Pk_cno primery key clustered(cno)
        3.删除主键:
            Alter Table Customer Drop constraint PK_cno

唯一键:unique--确保数据唯一
1.用于指定一个字段或者多个字段组合值具有唯一性,以防止字段中有重复的值;
2.和primary key区别:
  主键每个表只能有一个,而unique最多249个;
  主键的值不能为空,而unique可以有一行为空;
  主键默认情况下建立聚集索引,而unique默认建立非聚集索引;

  格式:
  constraint unique_name unique NONclustered(name)

如果有多个非聚焦索引,可以多次使用以上格式.
查看唯一键信息,格式如下:
    select * from sys.objects where type='UQ'
为已存在的表添加唯一键:
    alter table Customer Add Constraint UNIQUE_Mobile UNIQUE NONClustered(CMobileNo)

删除唯一键:
    alter table Customer Drop Constraint UNIQUE_Mobile

检查约束(Check):
    检查约束是对相应字段输入值设置检查条件,以限制输入值满足某些条件.比如:性别只能填写男女,年龄必须大于0,手机号必须要11位,邮箱必须满足格式等.
格式:
    Constraint Check_sex Check(sex in('男','女'))
    Constraint Check_age Check(cage>0)
    Constraint Check_mobile Check(cmobile like '[1][358][0-9]')
    Constraint Check_email Check(email like '%_[@]%_[.]%_')

查看Check约束信息:
    select * from sys.objects where type='C'
为已存在的表添加Check:
    Alter Table Customer Add constraint Check_sex Check(sex in('男','女'))
删除Check约束:
    Alter Table Customer Drop constraint Check_sex


默认值:(default)
    默认值是在插入操作中如果没有指定输入值的时候,系统自动指定的值.
    1.一个字段只能指定一个默认值;
    2.如果定义的默认值的长度超过了其对应字段允许的长度,系统将自动截取;
    3.不能对数据类型为timestamp的列或具有IDENTITY属性的列创建default定义.
格式:
    constraint DF_name default 'marry' for Cname
    如果写到字段后面,则不需要写for.


外键(foreign key):
    1.如果在foreign key约束的列中输入非NULL值,则此值必须在引用列中存在;否则将返回违反外键约束的错误信息;
    2.foreign key约束仅能引用位于同一服务器上的同一数据库中的表;跨数据库的引用完整性必须通过触发器实现;
    3.foreign key约束可引用同一表中的其他列,此行称为自引用;
    4.列级foreign key约束的References子句只能列出一个引用例;此列的数据类型必须与定义约束的列的数据类型相同;
    5.foreign key约束只能引用所引用的表的Primary Key或Unique约束中的列或所引用的表上Unique Index中的列;
    6.一个表中最多有32个外键,临时表不能有外键.
     格式:
         constraint FK_Cno Foreign Key(Cno) References Customer(Cno)
     案例:
     A.创建客户表(customer):
     create table customer
     (
         cno int constraint pk_cno primary key clustered(cno),
         cname char(10),
         cage tinyint constraint check_cage check(cage>0),
         csex char(2) ,
         cmobile char(11),
         cemail varchar(50)
     )
     B.创建商品表(product):
     create table product
     (
         productID int constraint pk_pdID primary key clustered(productID),
         productName varchar(50),
         Manufacturer char(40),
         price float
     )
     C.创建购物明细表(detail):
    create table detail
    (
        cno int constraint fk_cno foreign key(Cno) references customer(cno),
        productID int constraint fk_prodid foreign key(productID) references customer(productID),
        purDate smallDateTime constraint df_date default getdate(),
        constraint pk_detail primary key clustered(cno,productID)
    )
    插入数据校验:
    insert into customer() values()
    管理外键:
    1.查询外键:
        select * from sys.objects where type='FK'
    2.添加外键:
        Alter Table Customer Add constraint fk_cno foreign key(cno) references customer(cno)
    3.删除外键:
         Alter Table Customer Drop constraint fk_cno

空值(NULL):检查某个字段是否为空。
注意:
    A.在一个表调用聚合函数的时候,比如:avg,count,只要某个字段为空,调用函数的时间,此条记录会被忽略;
    B.变量没有赋值,默认就是为空,空值和任何数据运算都是空值。例如:
    declare @i int
    select @i+100
    结果显示为NULL。

格式:直接加 not null

posted @ 2017-11-27 19:43  代码,让世界更美好!  阅读(443)  评论(0编辑  收藏  举报