1. 程式人生 > 實用技巧 >MSSQL系列 (二):表相關操作、列操作、(唯一、主鍵、預設、檢查、外來鍵、非空)約束、臨時表

MSSQL系列 (二):表相關操作、列操作、(唯一、主鍵、預設、檢查、外來鍵、非空)約束、臨時表

1.建立表

--建立學生班級表
create table StuClass
(
ClassId int primary key, --班級ID 主鍵約束
ClassName nvarchar(30) not null unique, --班級名稱 非空約束 唯一約束
CreateDate datetime default getdate(), --建立時間 預設值約束
IsDelete nvarchar(1) default 'N' --是否刪除 預設'N' 'Y'代表刪除'N'代表不刪除 預設值約束
)
go --建立學生表
create table Student
(
StuId int primary key identity(1,1), --學生ID 主鍵約束 自增長
StuName nvarchar(30) not null, --學生姓名 非空約束
StuSex nvarchar(2) check(stuSex='男' or stuSex='女'), --學生性別 只是女或者男 檢查約束
CreateDate datetime default getdate(), --建立時間 預設當前時間 預設值約束
StuAge int, --學生年齡 無約束
ClassId int foreign key (ClassId) references StuClass (ClassId), --班級ID 外來鍵
IsDelete nvarchar(1) default 'N' --是否刪除 預設'N' 'Y'代表刪除'N'代表不刪除
)
go --建立學生科目表
create table StuSubject(
SubjectId int primary key, --科目ID
SubjectName nvarchar(30) , --科目名稱
)
go --建立學生成績表
create table StuScore(
StuId int foreign key (StuId) references Sutdent(StuId) on delete cascade, --學生ID 外來鍵約束 同時支援級聯刪除
SubjectId int foreign key (SubjectId) references StuSubject(SubjectId) on delete cascade , --學生科目 外來鍵約束
StuScore float, --學生成績
primary key(StuId,SubjectId) --聯合主鍵
)
go

2.約束相關操作(新增、刪除)

--新增約束的另一種方式 注意:兩種方式只能用一種
--新增主鍵約束
alter table StuScore add constraint PK_StuScore_StuId_SubjectId primary key (StuId)
go --新增非空約束
alter table StuScore alter column StuScore float not null
go --新增檢查約束
alter table StuInfo add constraint CK_StuInfo_StuSex check(StuSex='男' or StuSex='女')
go --新增唯一約束
alter table StuClass add constraint UQ_StuClass_ClassName unique(ClassName)
go --新增預設值約束
alter table StuClass add constraint DF_StuClass_CreateDate default(getdate()) for CreateDate
go --新增外來鍵約束
alter table StuInfo add constraint FK_StuClass_StuInfo foreign key (ClassId) references StuClass(ClassId) on delete cascade
go --刪除單個約束
alter table StuScore drop FK_StuClass_StuInfo
go --刪除多個約束
alter table StuScore drop constraint
FK_StuClass_StuInfo,
PK_StuScore_StuId_SubjectId
go

3.列相關操作

--新增列
alter table StuScore add CreateDate datetime default getdate();
go --刪除列
--刪除列名的時候 如果存在約束 要刪除約束
alter table StuScore drop DF__StuScore__Create__403A8C7D
alter table StuScore drop column CreateDate
go --修改列欄位型別
alter table StuScore alter column StuScore float
go --修改表名
--注意:更改物件名的任何部分都可能破壞指令碼和儲存過程,謹慎操作
exec sp_rename 'Student','StuInfo'
go --修改表中的列名
--注意:更改物件名的任何部分都可能破壞指令碼和儲存過程,謹慎操作
exec sp_rename 'StuInfo.CreateDate','CreateTime','column'
go

4.刪除表

--刪除表  注意當有主從表時候 先刪從表 如果設定了聯級刪除 那麼都會刪除
if exists(select count(*) from sys.objects where name='StuScore')
drop table StuScore
go

5.臨時表相關操作

--刪除臨時表
if object_id('tempdb..#StuInfo') is not null
drop table #StuInfo
go --建立臨時表
create table #StuInfo
(
StuId int primary key identity(1,1), --學生ID 主鍵約束 自增長
StuName nvarchar(30) not null, --學生姓名 非空約束
StuSex nvarchar(2) check(stuSex='男' or stuSex='女'), --學生性別 只是女或者男 檢查約束
CreateDate datetime default getdate(), --建立時間 預設當前時間 預設值約束
StuAge int, --學生年齡 無約束
IsDelete nvarchar(1) default 'N' --是否刪除 預設'N' 'Y'代表刪除'N'代表不刪除 預設值約束
)