实验环境: SQL Service 2014
一、数据库的创建
有三种类型的文件用来存储数据库:
主文件包含数据库的启动信息。主文件还可以用来存储数据。每个数据库都包含一个主文件。
次要文件保存所有主要数据文件中容纳不下的数据。如果主文件大到足以容纳数据库中的所有数据,就不需要有次要数据文件。而另一些数据库可能非常大,需要多个次要数据文件,也可能使用多个独立磁盘驱动器上的次要文件,以将数据分布在多个磁盘上。
事务日志文件保存用来恢复数据库的日志信息。每个数据库必须至少有一个事务日志文件(尽管可以有多个)。事务日志文件最小为 512 KB。
每个数据库至少有两个文件,一个主文件和一个事务日志文件。
注意:主文件是列表中的第一个文件,并使用 PRIMARY 关键字显式指定。事务日志文件在 LOG ON 关键字后指定。注意 FILENAME 选项中所用的文件扩展名:主要数据文件使用 .mdf,次要数据文件使用 .ndf,事务日志文件使用 .ldf。
使用create database 语句创建数据库
用sql语句创建一个名为book的数据库,它由5MB的主数据文件、2MB的次数据文件和1MB的日志文件组成。并且主数据文件以2MB的增长速度增长,其最大数据文件的大小为15MB,次数据文件以10%的增长速度增长,其最大次数据文件的大小为10MB,事务日志文件以1MB速度增长,其最大日志文件大小为10MB。
-- 先判断要创建的数据库是否已经存在,若存在则删除 if exists(select * from sysdatabases where name='book') drop database book; --使用create database语句创建数据库 create database book on primary -- 默认属于primary文件组,可省略 ( -- 主数据文件的具体描述 name = 'book1', --主数据文件的逻辑名称 -- 注意这里的目录 E:\database 必须是存在的,否则会有语法错误 filename = 'E:\database\book1.mdf', --主数据文件的物理文件名 size = 5, --主数据文件的初始大小 maxsize = 15, --主数据文件的最大大小 filegrowth = 2 --主数据文件的增长速度 单位是M ), ( -- 次数据文件的具体描述 name = 'book2', --次数据文件的逻辑名称 filename = 'E:\database\book2.ndf', --次数据文件的物理文件名 size = 2, --次数据文件的初始大小 maxsize = 10, --次数据文件的最大大小 filegrowth = 10% --次数据文件的增长率 ) log on ( -- 日志文件的具体描述 name = 'book_log', --日志文件的逻辑名称 filename = 'E:\database\book_log.ldf', --日志文件的物理文件名称 size = 1, --日志文件的初始大小 maxsize = 10, --日志文件的最大大小 filegrowth = 1 --日志文件的增长速度 单位是M )
二、数据表的创建
分别用企业管理器和SQL语句创建如下数据库表。
1、学生(学号,姓名,性别,出生日期,系别)
学号为主键,性别默认为男。
2、课程(课程号,课程名,学分)
课程号为主键,学分只能为1位数字1,2,4。
3、选课(学号,课程号,成绩)
学号和课程号为主键,成绩0--100之间。
/* 实验2 --- 数据表的创建 */ --使用前面创建的book数据库 use book; /*** 创建学生数据表 ***/ --要创建表需先判断该表是否已经存在 if exists(select * from sysobjects where name = 'Student') --注意当SC使用foreign key引用到该数据表时将无法删除,若想删除需先删除数据表SC drop table Student; --使用create table语句创建数据表Student create table Student ( --数据表Student的属性 Snum char(20) primary key, --学号定义为主码 Sname char(10), --学生姓名 Ssex char(4) check(Ssex in('男','女')) default ('男'), --学生性别,只能为男或女 Sbirth char(20), --学生出生日期 Sdept char(20) --学生系别 ) /*** 创建课程数据表 ***/ --要创建数据表需先判断该表是否已存在,若已存在则删除 if exists(select * from sysobjects where name = 'Course') drop table Course; --使用create table创建数据表Course create table Course ( --数据表Class的属性 Cnum char(20) primary key, --课程号为主码 Cname char(30) not null, --课程名,不为空 Ccredit int check(Ccredit in(1,2,4)) --学分只能为1,2,4 ) /*** 创建学生选课数据表 ***/ --判断表是否已经存在,若存在则删除 if exists(select * from sysobjects where name = 'SC') drop table SC; --使用语句create table创建数据表SC create table SC ( Snum char(20), --学生学号,受参照完整性条件约束 Cnum char(20), --课程号,也受参照完整性条件约束 --课程得分,取值范围1-100, 使用check进行检查 Cscore int check(Cscore between 0 and 100), --主码由两个属性组成,必须作为表级完整性进行定义 primary key(Snum, Cnum), --表级参照完整性约束条件,Snum是外码,被参照表是Student foreign key(Snum) references Student(Snum), --表级参照完整性约束条件,Cnum是外码,被参照表是Course foreign key(Cnum) references Course(Cnum) )