SQLServer数据库有哪几种文件组成?
主数据文件:*.mdf
次要数据文件:*.ndf
日志文件:*.ldf
创建SQLServer数据库时,需要指定哪些属性?
1.文件存放位置,分配的初始空间,属于哪个文件组
2.文件增长:可以按百分比或实际大小指定增长速度
3.文件容量设置:可以指定文件增长的最大值或不受限
创建数据库
CREATE DATABASE 数据库名 ON [PRIMARY] ( <数据文件参数> [,…n] [ <文件组参数> ] ) [LOG ON] ( <日志文件参数> [,…n] ) 日志文件参数> 文件组参数> 数据文件参数>
示例
使用CREATE DATABASE语句创建数据库MySchool,
要求:
1.该数据库具有一个数据文件和一个日志文件
2.文件保存在D盘已有的文件夹Project下
3.数据文件的大小初始为5MB,最大值为100MB,文件增长率是15%
4.日志文件的大小初始为2MB,增长量是1MB
CREATE DATABASE MySchool ON PRIMARY --默认就属于PRIMARY主文件组,可省略( NAME=' MySchool_data', --主数据文件的逻辑名 --主数据文件的物理名 FILENAME='D:\project\MySchool_data.mdf', SIZE=5MB, --主数据文件初始大小 MAXSIZE=100MB, --主数据文件增长的最大值 FILEGROWTH=15% --主数据文件的增长率)LOG ON( NAME='MySchool_log', FILENAME='D:\project\MySchool_log.ldf', SIZE=2MB, FILEGROWTH=1MB)GO
示例2
使用CREATE DATABASE语句创建数据库Employee,
要求:
1.数据库具有多个数据和日志文件
2.分别设置主数据文件和次要数据文件
3.分别设置不同的日志文件
LOG ON ( --日志文件1的具体描述 NAME = 'employeelog1', FILENAME = 'D:\project\employeelog1_Log.ldf' , SIZE = 10, FILEGROWTH = 1 ), ( --日志文件2的具体描述- NAME = 'employeelog2', FILENAME = 'D:\project\employeelog2_Log.ldf' , SIZE = 10, MAXSIZE = 50, FILEGROWTH = 1 )GO
删除数据库
删除数据库的语法
DROP DATABASE 数据库名USE master --设置当前数据库为master,以便访问sysdatabases表GOIF EXISTS ( SELECT * FROM sysdatabases WHERE name ='MySchool') DROP DATABASE MySchoolCREATE DATABASE MySchoolON ( … …)……GO
表的基础知识
简述创建表的基本步骤
1.确定表中有哪些列
2.确定每列的数据类型
3.给表添加各种约束
4.创建各表之间的关系
整型数据:int,smallint
浮点数据:float,numeric decimal,numeric
字符数据:
固定长度:char(6)
可变长度:varchar(10|max)
固定长度:nchar(6)
可变长度:nvarchar(10|max)
布尔数据(真/假)
bit:1/ 0
货币数据
money
日期数据
datetime
创建表
CREATE TABLE 表名 ( 列名1 数据类型 列的特征, 列名2 数据类型 列的特征, ...)
列的特征:
1.包括该列是否为空(NULL)
2.是否是标识列(自动编号)
3.是否有默认值、是否为主键等
示例:
USE MySchool --将当前数据库设置为MySchoolGOCREATE TABLE Student --创建学生信息表( StudentNo int NOT NULL, --学号,非空(必填) LoginPwd nvarchar(20) NOT NULL, --密码,非空(必填) StudentName nvarchar(20) NOT NULL, --姓名,非空(必填) Sex bit NOT NULL, --性别,非空(必填) GradeId int NOT NULL, --年级号(必填) Phone nvarchar(50) NULL, --电话 BornDate datetime NOT NULL, --出生日期(必填) Address nvarchar(255) NULL, --地址 Email nvarchar(50) NULL, --邮件帐号 IDENTITYCard varchar(18) NOT NULL --身份证号(必填)) GO
删除表
DROP TABLE 表名
示例:
--将当前数据库设置为MySchool,以便在MySchool数据库中建表USE MySchoolGOIF EXISTS (SELECT * FROM sysobjects WHERE name='Student' ) DROP TABLE StudentCREATE TABLE Student --创建学生信息表( … …) GO
数据完整性有哪几种?各自作用是什么?
实体完整性
1.能够唯一标识表中的每一条记录
2.实现方式:主键、唯一键、IDENTITY属性
域完整性
1.表中特定列数据的有效性,确保不会输入无效的值
2.实现方式:类型、缺省值、约束、空值
引用完整性
1.维护表间数据的有效性、完整性
2.实现方式:建立外键联系另一表的主键
自定义完整性
1.根据业务处理流程定义的特定业务规则
2.实现方式:存储过程、触发器、规则
使用约束的目的是什么?
确保表中数据完整性
常用的约束类型有哪些?
1.主键约束(Primary Key Constraint):要求主键列数据唯一,并且不允许为空
2.唯一约束(Unique Constraint):要求该列数据唯一,允许为空,但只能出现一个空值
3.检查约束(Check Constraint):某列取值范围限制、格式限制等
4.默认约束(Default Constraint):某列的默认值
5.外键约束(Foreign Key Constraint):用于两表间建立关系,需要指定引用主表的哪列
约束名的取名规则推荐采用:约束类型_约束列
1.主键(Primary Key)约束:如 PK_stuNo
2.唯一(Unique Key)约束:如 UQ_stuID
3.默认(Default Key)约束:如 DF_stuAddress
4.检查(Check Key)约束:如 CK_stuBornDate
5.外键(Foreign Key)约束:如 FK_stuNo
添加约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 具体的约束说明
约束名的取名规则推荐采用:约束类型_约束列
1.主键(Primary Key)约束:如 PK_stuNo
2.唯一(Unique Key)约束:如 UQ_stuID
3.默认(Default Key)约束:如 DF_stuAddress
4.检查(Check Key)约束:如 CK_stuBornDate
5.外键(Foreign Key)约束:如 FK_stuNo
删除约束的语法
ALTER TABLE 表名 DROP CONSTRAINT 约束名
示例
例如:删除Student表中地址默认约束ALTER TABLE Student DROP CONSTRAINT DF_stuAddress
需求说明:
使用T-SQL脚本向Subject表中插入记录,随后,使用ALTER TABLE语句向课程表Subject中添加相关约束
1.主键约束:课程编号
2.非空约束:课程名称
3.检查约束:学时必须大于等于0
4.外键约束:主表Grade和从表Subject通过GradeID建立引用关系
USE MySchoolGOALTER TABLE Subject --主键约束(课程编号) ADD CONSTRAINT PK_Subject PRIMARY KEY (SubjectNo)ALTER TABLE Subject --非空约束(课程名称) ADD CONSTRAINT CK_SubjectName CHECK (SubjectName is not null)ALTER TABLE Subject WITH NOCHECK --检查约束(学时必须大于等于0) ADD CONSTRAINT CK_ClassHour CHECK (ClassHour>=0)ALTER TABLE Subject --外键约束(主表Grade和从表Subject建立引用关系) ADD CONSTRAINT FK_GradeId FOREIGN KEY (GradeId) REFERENCES Grade (GradeId)GO
WITH NOCHECK对表中已 有数据不做约束检查,因此 不能保证表中数据的正确性
总结
数据库的物理实现的步骤
1.创建数据库
2.创建表
3.添加各种约束
4.创建数据库的登录账户并授权
创建数据表后可以添加的约束类型
1.主键约束(Primary Key Constraint)
2.唯一约束(Unique Constraint)
3.检查约束(Check Constraint)
4.默认约束(Default Constraint)
5.外键约束(Foreign Key Constraint)