SQL Sever修改表结构

780 阅读3分钟

image.png 特别强调:每一次修改表结构都要从ALTER TABLE开始。

1.为表增加列

image.png
为Student表增加“入学时间”(S_entrance)列,其数据类型为日期型。
ALTER TABLE Student ADD S_entrance DATE
为KCXX表增加字段:“授课教师” ,数据类型为char(10)。
alter table KCXX add 授课教师 char(10)
为KCXX表增加identity列:ID(int类型、初始值1、增量1)。
alter table KCXX add ID int identity(1,1)
为Student表增加列出生年份:Sbirth,并设置为自动计算:2021-Sage。
alter table Student add Sbirth as 2021-Sage

2.修改表的列

image.png
将Student表的年龄(Sage)列的数据类型由改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT
修改KCXX表的“授课教师” 字段名为teacher,数据类型为char(20)。两步
sp_rename 'KCXX.授课教师' , 'teacher' ,'column'
alter table KCXX alter column teacher char(20)
3.增加表约束

image.png
为Course表的Ccredit列增加值为(1~4)的约束。
ALTER TABLE Course ADD CHECK (Ccredit>=1 AND Ccredit<=4)
ALTER TABLE Course ADD CONSTRAINT chk_credit CHECK (Ccredit>=1 AND Ccredit<=4)
为“价格”列创建check约束chk_JG,限制其值不能为空。
alter table 教材 add constraint chk_JG check(价格 is not null)

为课程表Course的课程名称(Cname)列增加必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname)ALTER TABLE Course ADD CONSTRAINT U_name UNIQUE(Cname)
为Student表的列Ssex列增加默认值’男’。
alter table Student add default '男' for Ssex
alter table Student add constraint MoRen default '男' for Ssex

为教材表增加“书名” 为主键。
alter table 教材 add primary key(书名)
alter table 教材 add constraint PK_教材_书名 primary key(书名)
为表教材的所属学科列增加外键:参照表学科的学科编号。一次只能增加一个外键约束!
alter table 教材 add foreign key(所属学科) references 学科(学科编号)
alter table 教材 add constraint FK_教材_学科 foreign key(所属学科) references 学科(学科编号)

为“类型”列创建名为chk_LX的check约束,限制其值只能为“新书”、或“二手书”。
alter table 教材 add constraint chk_LX check(类型 in ('新书','二手书'))

为教材表的“类型”列增加默认值“新书”。
alter table 教材 add default '新书' for 类型

4.删除表的列

删除XSDA1表里的Sbirth列
alter table XSDA1 drop column Sbirth

5.删除表约束

image.png 主键、外键、唯一值、默认值、check约束都是按约束constraint删除

删除教材表的外键。
alter table 教材 drop FK__教材__所属学科__66603565
删除教材表的约束。
alter table 教材 drop constraint chk_date

可以用一个alter table xscj drop constraint...  语句删除多个外键:
alter table xscj drop [constraint] fk1, fk2

PRIMARY KEY约束与UNIQUE约束的主要区别如下:

(1)一个数据表只能定义一个PRIMARY KEY约束,但一个表中可根据需要对不同的列定义若干个UNIQUE约束。
(2)PRIMARY KEY字段的值不允许为NULL,而UNIQUE字段的值可取NULL。
(3)一般创建PRIMARY KEY约束时,系统会自动产生索引,索引的默认类型为簇索引。创建UNIQUE约束时,系统会自动产生一个UNIQUE索引,索引的默认类型为非簇索引。

PRIMARY KEY约束与UNIQUE约束的相同点在于:二者均不允许表中对应字段存在重复值。

设置级联修改

先删除原来的外键
alter table xscj drop [constraint] FK_kcxx_课程编号
再增加新的带CASCADE的外键
alter table xscj add constraint FK_kcxx_课程编号 foreign key(课程编号) references kcxx(课程编号) on update cascade

设置级联删除

先删除原来的外键
alter table xscj drop [constraint] FK_kcxx_课程编号
再增加新的带CASCADE的外键
alter table xscj add constraint FK_kcxx_课程编号 foreign key(课程编号) references kcxx(课程编号) on delete cascade