SQLServer数据库基础开发知识
目录
1、约束作用
2、约束的类型
3. 外键约束的使用和需要删除具有外键约束的表中的数据方法
4. 创建数据库、数据表和表的约束的示例代码
--指向当前要使用的数据库
use master
go
--判断当前数据库是否存在
if exists (select * from sysdatabases where name='SMDB')
drop database SMDB --删除数据库
go
--创建数据库
create database SMDB
on primary
(
--数据库文件的逻辑名
name='SMDB_data',
--数据库物理文件名(绝对路径)
filename='D:\DB\SMDB_data.mdf',
--数据库文件初始大小
size=10MB,
--数据文件增长量
filegrowth=1MB
)
--创建日志文件
log on
(
name='SMDB_log',
filename='D:\DB\SMDB_log.ldf',
size=2MB,
filegrowth=1MB
)
go
--创建学员信息数据表
use SMDB
go
if exists (select * from sysobjects where name='Students')
drop table Students
go
create table Students
(
StudentId int identity(100000,1) ,
StudentName varchar(20) not null,
Gender char(2) not null,
Birthday smalldatetime not null,
StudentIdNo numeric(18,0) not null,--身份证号
StuImage text null,--学员照片
Age int not null,
PhoneNumber varchar(50),
StudentAddress varchar(500),
ClassId int not null --班级外键
)
go
--创建班级表
if exists(select * from sysobjects where name='StudentClass')
drop table StudentClass
go
create table StudentClass
(
ClassId int primary key,
ClassName varchar(20) not null
)
go
--创建成绩表
if exists(select * from sysobjects where name='ScoreList')
drop table ScoreList
go
create table ScoreList
(
Id int identity(1,1) primary key,
StudentId int not null,
CSharp int null,
SQLServerDB int null,
UpdateTime smalldatetime not null
)
go
--创建管理员用户表
if exists(select * from sysobjects where name='Admins')
drop table Admins
create table Admins
(
LoginId int identity(1000,1) primary key,
LoginPwd varchar(20) not null,
AdminName varchar(20) not null
)
go
--创建数据表的各种约束
use SMDB
go
--创建“主键”约束primary key
if exists(select * from sysobjects where name='pk_StudentId')
alter table Students drop constraint pk_StudentId
alter table Students
add constraint pk_StudentId primary key (StudentId)
--创建检查约束check
if exists(select * from sysobjects where name='ck_Age')
alter table Students drop constraint ck_Age
alter table Students
add constraint ck_Age check (Age between 18 and 35)
--创建唯一约束unique
if exists(select * from sysobjects where name='uq_StudentIdNo')
alter table Students drop constraint uq_StudentIdNo
alter table Students
add constraint uq_StudentIdNo unique (StudentIdNo)
--创建身份证的长度检查约束
if exists(select * from sysobjects where name='ck_StudentIdNo')
alter table Students drop constraint ck_StudentIdNo
alter table Students
add constraint ck_StudentIdNo check (len(StudentIdNo)=18)
--创建默认约束
if exists(select * from sysobjects where name='df_StudentAddress')
alter table Students drop constraint df_StudentAddress
alter table Students
add constraint df_StudentAddress default ('地址不详' ) for StudentAddress
if exists(select * from sysobjects where name='df_UpdateTime')
alter table ScoreList drop constraint df_UpdateTime
alter table ScoreList
add constraint df_UpdateTime default (getdate() ) for UpdateTime
--创建外键约束
if exists(select * from sysobjects where name='fk_classId')
alter table Students drop constraint fk_classId
alter table Students
add constraint fk_classId foreign key (ClassId) references StudentClass(ClassId)
if exists(select * from sysobjects where name='fk_StudentId')
alter table ScoreList drop constraint fk_StudentId
alter table ScoreList
add constraint fk_StudentId foreign key(StudentId) references Students(StudentId)
5. 插入测试数据
一些使用经验
use SMDB
go
--插入班级数据
insert into StudentClass(ClassId,ClassName) values(1,'网监1区')
insert into StudentClass(ClassId,ClassName) values(2,'网监2区')
insert into StudentClass(ClassId,ClassName) values(3,'信息安全')
insert into StudentClass(ClassId,ClassName) values(4,'计算机科学与技术')
--插入学员信息
insert into Students (StudentName,Gender,Birthday,Age,StudentIdNo,PhoneNumber,StudentAddress,ClassId)
values('苏家辉','男','1989-08-07',22,120223198908071111,'022-22222222','天津市南开区红磡公寓5-5-102',1),
('小美女','女','1989-05-06',22,120223198905062426,'022-33333333','天津市河北区王串场58号',2),
('小帅哥','男','1990-02-07',21,120223199002078915,'022-44444444','天津市红桥区丁字沽曙光路79号',4)
--插入成绩信息
insert into ScoreList (StudentId,CSharp,SQLServerDB)values(100000,60,78),(100001,55,88),(100002,90,58)
--插入管理员信息
insert into Admins (LoginPwd,AdminName) values(123456,'杨家贵')
insert into Admins (LoginPwd,AdminName) values(123456,'陈皮')
insert into Admins (LoginPwd,AdminName) values(123456,'刘懿蝉')
6. 因为添加约束出现的问题解决
7.identity的使用
如果数据库已经创建并且已经做了部署,但是我们希望identity从头开始,可以使用truncate,但是使用前有个前提那就是必须没有引用关系,如果有引用关系,先删除引用关系
8、数据库查询及对NULL的处理
9、简单的几个查询