zoukankan      html  css  js  c++  java
  • sql 添加约束

    在表中添加约束,基本常用的有两种类型,一个是创建表时同时添加约束,另一个是创建好表通过修改表添加约束,在这里是创建表时同时添加约束,但是有两种不同的用写法。

    在这里列举出一些创建约束的形式,共参考(均在SQLServer2005中编译通过):

     

    create database stuDB

    go

     

    use stuDB

    go 

     

    ----- 1.1 先创建表在创建表,然后通过修改表在创建约束(理论课中的示例)---

    -- 先创建表

    CREATE  TABLE  stuInfo  /*-创建学员信息表-*/

    (

    stuName  VARCHAR(20)  NOT  NULL ,  --学员姓名,非空(必填)

     stuNo   CHAR(6)  NOT  NULL,   --学号,非空(必填)

     stuAge  INT  NOT  NULL,  --年龄,INT类型不用指定大小,默认为个字节

    stuID  NUMERIC(18,0),     --身份证号,NUMERIC (18,0)代表位数字,小数位数为

    stuSeat   SMALLINT  IDENTITY (1,1),   --座位号,自动编号(标识列),从开始递增

    stuAddress   TEXT   --住址,允许为空,即可选输入

    GO

    CREATE TABLE stuMarks

    (

    ExamNo  CHAR(7)  NOT NULL,  --考号

     stuNo  CHAR(6)  NOT NULL,   --学号

     writtenExam  INT  NOT NULL,  --笔试成绩

     LabExam  INT  NOT NULL    --机试成绩

    )

    GO

    -- 然后健约束

    ---- 添加主键约束(stuNo作为主键)

    ALTER TABLE stuInfo 

    ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo)

    ---添加唯一约束(身份证号唯一,因为每人的身份证号全国唯一)

    ALTER TABLE stuInfo 

    ADD CONSTRAINT UQ_stuID UNIQUE (stuID)

    ---添加默认约束(如果地址不填,默认为地址不详

    ALTER TABLE stuInfo 

    ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不详') FOR stuAddress

    ---添加检查check约束,要求年龄只能在-岁之间

    ALTER TABLE stuInfo 

    ADD CONSTRAINT CK_stuAge CHECK(stuAge BETWEEN 15 AND 40)

    --添加外键约束(主表stuInfo和从表stuMarks建立关系,关联字段为stuNo

    ALTER TABLE stuMarks

       ADD CONSTRAINT FK_stuNo          

         FOREIGN KEY(stuNo) REFERENCES stuInfo(stuNo)

    GO

     

     

    ----- 1.2 先创建表在创建表,然后通过修改表在创建约束(项目实战中的的示例)

     

    drop table stuMarks

    drop table stuInfo

    go

    -- 先创建表

    CREATE  TABLE  stuInfo  /*-创建学员信息表-*/

    (

    stuName  VARCHAR(20)  NOT  NULL ,  --学员姓名,非空(必填)

     stuNo   CHAR(6)  NOT  NULL,   --学号,非空(必填)

     stuAge  INT  NOT  NULL,  --年龄,INT类型不用指定大小,默认为个字节

    stuID  NUMERIC(18,0),     --身份证号,NUMERIC (18,0)代表位数字,小数位数为

    stuSeat   SMALLINT  IDENTITY (1,1),   --座位号,自动编号(标识列),从开始递增

    stuAddress   TEXT   --住址,允许为空,即可选输入

    GO

    CREATE TABLE stuMarks

    (

    ExamNo  CHAR(7)  NOT NULL,  --考号

     stuNo  CHAR(6)  NOT NULL,   --学号

     writtenExam  INT  NOT NULL,  --笔试成绩

     LabExam  INT  NOT NULL    --机试成绩

    )

    GO

    -- 然后健约束注意:与前面的示例的区别是用号隔开

    ALTER TABLE stuInfo 

    ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo)

    ---添加唯一约束(身份证号唯一,因为每人的身份证号全国唯一)

    ,CONSTRAINT UQ_stuID UNIQUE (stuID)

    ---添加默认约束(如果地址不填,默认为地址不详

    , CONSTRAINT DF_stuAddress DEFAULT ('地址不详') FOR stuAddress

    ---添加检查check约束,要求年龄只能在-岁之间

    , CONSTRAINT CK_stuAge CHECK(stuAge BETWEEN 15 AND 40)

    --添加外键约束(主表stuInfo和从表stuMarks建立关系,关联字段为stuNo

    , CONSTRAINT FK_stuNo          

         FOREIGN KEY(stuNo) REFERENCES stuInfo(stuNo)

    GO

     

    ----- 2.1 创建表时同时添加约束----------

     

    drop table stuMarks

    drop table stuInfo

    go

    CREATE  TABLE  stuInfo  /*-创建学员信息表-*/

    (

    stuName  VARCHAR(20)  NOT  NULL ,  --学员姓名,非空(必填)

     stuNo   CHAR(6) primary key ,   --学号,主键

     stuAge  INT  NOT  NULL check(stuAge between 15 and 40),  --年龄,检查约束

    stuID  NUMERIC(18,0)unique ,     --身份证号,NUMERIC (18,0)代表位数字,小数位数为,该列唯一约束

    stuSeat   SMALLINT  IDENTITY (1,1),   --座位号,自动编号(标识列),从开始递增

    stuAddress   TEXT  default '地址不详' --住址,允许为空,即可选输入,默认地址不详

    GO

    CREATE TABLE stuMarks

    (

    ExamNo  CHAR(7)  primary key,  --考号,主键

     stuNo  CHAR(6)  NOT NULL foreign key references stuInfo(stuNo) ,  --学号,外键

     writtenExam  INT  NOT NULL,  --笔试成绩

     LabExam  INT  NOT NULL    --机试成绩

    )

    GO

     

    ----- 2.2 创建表时同时添加约束,另一个版本-------------

    drop table stuMarks

    drop table stuInfo

    go

    CREATE  TABLE  stuInfo  /*-创建学员信息表-*/

    (

    stuName  VARCHAR(20)  NOT  NULL ,  --学员姓名,非空(必填)

     stuNo   CHAR(6),   

     CONSTRAINT pk_stuNo primary key (stuNo),   --学号,主键

     stuAge  INT  NOT  NULL ,              --年龄,

    constraint ck_stuAge check(stuAge between 15 and 40),-- 检查约束

    stuID  NUMERIC(18,0) ,                 --身份证号,NUMERIC (18,0)代表位数字,小数位数为,该列唯一约束

    constraint uq_stuId unique(stuID),

    stuSeat   SMALLINT  IDENTITY (1,1),    --座位号,自动编号(标识列),从开始递增

    stuAddress   TEXT  ,                   --住址,允许为空,即可选输入

    GO

    CREATE TABLE stuMarks

    (

    ExamNo  CHAR(7)  primary key,  --考号,主键

    stuNo  CHAR(6)  NOT NULL  ,  --学号,外键

    constraint fk_stuNo foreign key(stuNo) references stuInfo(stuNo),

     writtenExam  INT  NOT NULL,  --笔试成绩

     LabExam  INT  NOT NULL    --机试成绩

    )

    GO

    -- 再来

    drop table stuMarks

    drop table stuInfo

    go

    CREATE  TABLE  stuInfo  /*-创建学员信息表-*/

    (

    stuName  VARCHAR(20)  NOT  NULL ,  --学员姓名,非空(必填)

     stuNo   CHAR(6),   

     primary key (stuNo),   --学号,主键

     stuAge  INT  NOT  NULL ,              --年龄,

     check(stuAge between 15 and 40),-- 检查约束

    stuID  NUMERIC(18,0) ,                 --身份证号,NUMERIC (18,0)代表位数字,小数位数为,该列唯一约束

    unique(stuID),

    stuSeat   SMALLINT  IDENTITY (1,1),    --座位号,自动编号(标识列),从开始递增

    stuAddress   TEXT  ,                   --住址,允许为空,即可选输入

    GO

    CREATE TABLE stuMarks

    (

    ExamNo  CHAR(7)  primary key,  --考号,主键

    stuNo  CHAR(6)  NOT NULL  ,  --学号,外键

     foreign key(stuNo) references stuInfo(stuNo),

     writtenExam  INT  NOT NULL,  --笔试成绩

     LabExam  INT  NOT NULL    --机试成绩

    )

    GO

     

    -- 添加复合主键

    drop table stuMarks

    drop table stuInfo

    go

     

    CREATE  TABLE  stuInfo  /*-创建学员信息表-*/

    (

    stuName  VARCHAR(20)  NOT  NULL ,  --学员姓名,非空(必填)

     className   CHAR(6)  NOT  NULL,   --班级名称,非空(必填)

     stuAge  INT  NOT  NULL,  --年龄,INT类型不用指定大小,默认为个字节

    GO

     

    -- 然后健约束注意:这里是复合主键

    ALTER TABLE stuInfo 

    ADD CONSTRAINT PK_stuNo PRIMARY KEY (className,stuName)

     

    -- OR

     

    drop table stuInfo

    go

    -- 先创建表

    CREATE  TABLE  stuInfo  /*-创建学员信息表-*/

    (

    stuName  VARCHAR(20)  NOT  NULL ,  --学员姓名,非空(必填)

     className   CHAR(6)  NOT  NULL,   --班级名称,非空(必填)

    CONSTRAINT PK_stuNo PRIMARY KEY (className,stuName),   -- 复合主键

     stuAge  INT  NOT  NULL,  --年龄,INT类型不用指定大小,默认为个字节

    GO

    -- 再来一种

    create table A

    (

    a1 int ,

    b1 int not null

    )

     

    select * from A

     

    alter table A alter column a1 float null

     

    alter table A  alter column a1 float not null

    alter table A add primary key (a1)

     

    alter table A add check (b1 between 1 and 100)

     

  • 相关阅读:
    软件工程课程总结
    c#代码分析
    运用visual studio进行简单的单元测试
    安装visual studio过程
    忙着,快乐着
    软件工程心得
    session
    XML
    期末团队评价
    黄金点游戏
  • 原文地址:https://www.cnblogs.com/mingjian/p/4064756.html
Copyright © 2011-2022 走看看