实验环境:SQL server2017
表:依次是Student,Course,SC。
用SQL语句创建Student表,Course表,SC表。
Student表:涉及空值约束,主键约束,默认值约束,均为列级完整性约束,可直接写在在对应列后面。
create table Student(
Sno char(8) not null primary key,
Sname varchar(8) not null,
Sex char(2) not null default '男',
Birth smalldatetime not null,
Classno char(3) not null,
Entrance_date smalldatetime not null,
Home_addr varchar(40)
);
go
Course表:出现了新的约束,但仍是列级约束。
create table Course(
Cno char(3) not null primary key,
Cname varchar(20) not null,
Total_perior smallint check(Total_perior>0),
Credit tinyint check(Credit>0 and Credit<=6),
);
go
SC表:主键由两个属性构成,必须作为表级完整性约束(所有列写完再写),
create table SC(
Sno char(8) not null,
Cno char(3)not null,
Grade tinyint check(Grade>=0 and Grade<=100),
primary key(Sno,Cno),
foreign key(Sno) references Student(Sno),
/* 表级完整性约束条件,Sno是外键,被参照表是Student*/
foreign key(Cno) references Course(Cno),
/* 表级完整性约束条件,Cno是外键,被参照表是Course*/
);
go
对表进行修改为 ALTER TABLE <表名>
[ADD <新列名><数据类型>| [完整性约束] ] 用于新增列和完整性约束
[DROP COLUMN<列名> | <完整性约束]>] 用于删除列和指定的完整性约束
[ALTER COLUMN<列名><数据类型>]; 用于修改列名和数据类名
alter table Student
add stature numeric(4,2) check(stature<3.0),sdept char(20) not null,postcode char(6) check(postcode like'[0-9][0-9][0-9][0-9][0-9][0-9]');
/*同一个表的新增列操作合一行写了,like'[0-9][0-9][0-9][0-9][0-9][0-9]'约束数字*/
go
(4)删除Student表中的身高列stature
alter table Student drop constraint CK__Student__stature__4222D4EF;
alter table Student drop column stature;
go
/*这里直接删会报错,因为还有约束,所以第一行先删除对应约束*/
alter table Student add check(Entrance_date>Birth);
go
(2)给SC表的成绩列grade增加默认值约束,默认值为0。
alter table SC add default(0) for grade;
go
(3)删除grade列的默认值约束。
未解决
alter table SC
alter column grade drop default
go
报错:关键字 ‘default’ 附近有语法错误。
这里给出w3c相关的撤销 DEFAULT 约束
SQL DEFAULT约束https://www.w3school.com.cn/sql/sql_default.asp