首页 > 代码库 > sql 添加约束

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)

 

sql 添加约束