核心考点:数据表创建、主键、自增列、数据类型、非空约束、外键约束、表结构删除判断
代码说明:修正原代码细微规范问题、补全外键关系、保留老师原版所有注释逻辑,可直接执行
一、切换数据库
--指定使用 StudentDataBase 数据库 use StudentDataBase go二、判断并删除已存在学生表
--如果系统表中存在Students表,先删除,防止重复创建报错 if exists(select * from sysobjects where name = 'Students') drop table Students go知识点:sysobjects是SQL系统表,存储当前库所有表、视图、存储过程对象信息
三、创建学生表 Students(完整版逐列释义)
--创建学生表 create table Students ( --学生编号:int整型、自增列 --identity(起始值,递增量) 从1000开始,每次+1 StudentId int identity(1000,1), --学生姓名:可变长度字符,最大20字符,不能为空 --varchar:动态字符(节省空间),一个汉字占2个字符 StudentName varchar(20) not null, --性别:固定长度字符,固定占2位,不能为空 --char固定长度,内容不足自动补空格 Gernder char(2) not null, --出生日期:日期时间类型 Birthday datetime not null, --身份证号:数值类型,共18位、0位小数,纯数字身份证适配 StudentIDCard numeric(18,0) not null, --年龄:整型、允许为空 Age int, --手机号:动态字符,允许为空 Phone varchar(20), --学生地址:动态长字符,最大500字符 StudentAddress varchar(500), --班级编号:外键字段,关联班级表,不能为空 ClassId int not null ) go四、创建班级表 Class(主键表)
--创建班级主表(主键表) create table Class ( --班级编号:本表主键,唯一标识、非空、不重复 ClassId int primary key, --班级名称:可变字符,不能为空 ClassName varchar(20) not null ) go五、补全:外键约束(考试核心,原代码缺失)
外键概念:从表(Students)的ClassId 关联 主表(Class)的ClassId,保证数据完整性,防止乱填班级编号
--给学生表添加外键约束 --学生表ClassId 引用 班级表ClassId alter table Students add constraint FK_Students_ClassId foreign key (ClassId) references Class(ClassId) go约束命名规范:FK_从表名_字段名,可读性最强,考试标准写法
六、数据类型考点总结(背诵)
int:整型,存数字、年龄、编号
char(n):固定长度字符,长度固定,适合性别、固定位数编码
varchar(n):可变长度字符,节省空间,适合姓名、地址、手机号
datetime:标准日期时间类型,存年月日时分秒
numeric(总长度,小数位数):精准数值,本例 numeric(18,0) 18位纯数字
七、约束知识点汇总
identity(a,b):自增约束,只插入不赋值,数据库自动生成编号
not null:非空约束,该字段必须赋值,不允许空值
primary key:主键约束,唯一、非空、数据表唯一标识
foreign key:外键约束,关联两张表,保证数据一致性
八、表关系说明
一对多关系: 一个班级(Class) 包含 多个学生(Students) 班级表:主键表(一) 学生表:外键表/从表(多)
九、原代码问题修正说明
原代码缺少外键约束:只定义了ClassId字段,未建立关联,已补全标准外键语句
StudentId自增列未设置主键(可自行拓展,考试常用)
字段命名、类型完全保留你课堂原版,零改动
SQL 完整创建数据库代码(主文件+次文件+日志文件)
考试重点:数据库删除判断、主文件/次要数据文件/日志文件区别、数据库四大属性、文件后缀名
运行前提:必须提前手动创建文件夹D:\SQLServe_DB\,否则路径不存在直接报错
代码完整性:先删后建、双数据文件+单日志文件,标准教学满分格式
一、切换系统数据库 master
--操作数据库(创建/删除)必须在master系统库下执行 use master go知识点:用户自定义数据库的创建、删除、分离、附加操作,必须依托 master 系统数据库,不能在自建库中操作。
二、判断数据库存在并删除
--sysdatabases:系统视图,记录当前服务器所有数据库 --判断是否存在名为 StudentDataBase 的数据库,存在则删除 if exists (select * from sysdatabases where name = 'StudentDataBase') drop database StudentDataBase go核心关键字释义(背诵)
exists:判断查询结果是否存在数据,存在返回true
sysdatabases:系统数据库视图,存储本机所有数据库信息
drop database:彻底删除数据库(包含数据文件和日志文件)
三、完整创建数据库(主文件+次文件+日志文件)
--创建自定义数据库 StudentDataBase create database StudentDataBase --指定配置【主数据文件】 on primary ( name = 'StudentDB', --主文件逻辑名称(数据库内部调用名) filename = 'D:\SQLServe_DB\StudentDB.mdf', --主文件物理路径 mdf后缀 size = 10MB, --初始文件大小 filegrowth=5MB --文件自动增长增量 ), --配置【次要数据文件】 ( name = 'StudentDB_nd', filename = 'D:\SQLServe_DB\StudentDB_nd.ndf', --次要数据文件 ndf后缀 size = 10MB, filegrowth=5MB ) --配置【日志文件】 log on ( name = 'StudentDB_log', filename = 'D:\SQLServe_DB\StudentDB_log.ldf', --日志文件 ldf后缀 size = 10MB, filegrowth=5MB ) go四、数据库三大文件详解(必考)
文件类型 | 后缀 | 数量 | 作用 |
|---|---|---|---|
主数据文件 | .mdf | 有且仅有一个 | 存储所有数据表结构、核心数据、数据库启动信息 |
次要数据文件 | .ndf | 0个/多个 | 分担主文件压力,存储额外数据,扩容使用 |
日志文件 | .ldf | 至少一个 | 记录所有增删改操作日志,用于数据恢复、回滚 |
五、数据库文件四大配置属性
name:逻辑文件名,SQL内部识别名称,无需和物理文件名一致
filename:物理绝对路径,磁盘真实存储位置
size:文件初始大小
filegrowth:文件自动增长量,存储空间不足时自动扩容
六、代码易错点(改错必考)
路径必须提前创建:D:\SQLServe_DB 文件夹必须手动建好,SQL不会自动建文件夹,路径不存在直接报错
go位置不能乱改:on primary 和 log on 属于同一个创建语句整体,go必须写在最后
后缀名不能写错:mdf/ndf/ldf 三种后缀不能混用
删除数据库必须在master库下执行,否则报错
七、拓展知识点:分离与附加(课堂预留考点)
7.1 分离数据库
将数据库从SQL服务器列表移除,保留磁盘mdf/ndf/ldf文件,用于迁移数据库
--分离语法 exec sp_detach_db 'StudentDataBase' go7.2 附加数据库
将磁盘中存在的数据库文件,重新挂载到SQL服务器中
--附加语法(了解) create database StudentDataBase on primary (filename='D:\SQLServe_DB\StudentDB.mdf') log on (filename='D:\SQLServe_DB\StudentDB_log.ldf') for attach go八、简答题背诵总结
1、数据库三种文件分别是什么?主数据文件(.mdf)、次要数据文件(.ndf)、日志文件(.ldf)
2、为什么创建数据库要切换master?master是系统核心数据库,负责管理所有用户数据库,数据库级操作必须在master中执行。
3、filegrowth作用?设置数据库文件自动增长大小,磁盘空间不足时自动扩容,避免数据写入失败。