数据库实验一

《数据库原理与应用》实验报告

实验一、定义数据库和表

一、实验环境

Windows 2003 Server、SQL Server 2008

二、实验目的

掌握使用企业管理器提供的图形化交互窗口创建、修改数据库、表结构与整性约束、建立索引,掌握创建、修改数据库、表结构与整性约束的SQL语句。掌握使用企业管理器提供的图形化交互窗口输入、修改和删除表中的记录,掌握输入、修改和删除表中的记录的SQL语句。

三、实验方法

(1)利用资源管理器在D盘上建立“学号姓名DB”命名的文件夹,以便保存数据库。按设计好数据库和表结构创建数据库与表结构的SQL语句完成数据库与表的建立,以及记录的操作。

(2)利用SQL Server 200X DBMS的交互式界面窗口练习建立数据库SDB1与Dept1、T1、S1、C1、SC1表,以及记录的操作。

四、具体操作及结论分析

1.建立数据库SBD的SQL语句

Create database sdb

on primary

(name=sdb_data,

filename='D:\xxxDB\xxx.mdf',

size=100MB,

maxsize=200MB,

filegrowth=20MB)

log on

(name=sdb_log,

filename='D:\xxxDB\xxx.ldf',

size=50MB,

maxsize=100MB,

filegrowth=10MB)

USE sdb

1.建立表Dept、T、S、C、SC的SQL语句

create table dept(

dno char(2) primary key,

dname varchar(30) unique not null,

dean char(10),

adddress varchar(40))

create table t(

tno char(4) primary key,

dno char(2) references dept(dno),

tn varchar(10) not null,

sex char(2) check(sex='男' or sex='女'),

title char(10) check(title in('教授','副教授','讲师')))

create table s(

sno char(4) primary key,

sn varchar(10),

sex char(2) check(sex='男' or sex='女'),

age int check(age>=17 and age<=25),

dno char(2) references dept(dno),

bp varchar(20))

create table c(

cno char(2) primary key,

cn char(10),

period int not null,

tno char(4) references t(tno),

class char(20) check(class in('公共基础','专业基础','专业课','专业选修')))

create table sc(

sno char(4) references s(sno),

cno char(2) references c(cno),

grade int not null check(grade between 0 and 100),primary key(sno,cno))

2.修改教师表T的SQL语句(给表T增加一个字段:PHON,并定义合适的数据类

型)

alter table t add phon varchar(10);

3.分别给出Dept、T、S、C、SC三个表,每个表插入2条记录的SQL语句

insert into dept values('01','外语学院','史宝辉','教5011');

insert into dept values('02','工学院','俞国辉','森801');

insert into t values('0101','01','李健','男','教授');

insert into t values('0202','02','张青','女','教授');

insert into s values('0101','李成占','男','19','01','河南');

insert into s values('0202','马驰','男','18','01','辽宁');

insert into c values('01','数学','80','0101','公共基础');

insert into c values('02','英语','120','0101','公共基础');

insert into sc values('0101','01','80');

insert into sc values('0101','02','85');

4.给出一条修改SC表记录的SQL语句

update sc set grade=0 where sno='0101' and cno='02';

5.给出一条删除C表中一条记录的SQL语句

delete from sc where cno='02';

delete from c where cno='02';

7.讨论回答下面问题

(1)建立表的顺序有要求吗?为什么?

有要求,因为表与表之间有参照完整性约束关系,所以得先建立被参照的表,即充当主键的表,后建其它表,即作为外建的表。

(2)为什么要按Dept、T、S、C和SC顺序输入记录?

因为表与表之间有参照完整性约束关系,所以得先建立被参照的表,后建其它表。如:t表中的dno字段就参照了dept表中的dno字段,所以得先建立dept表。同理,其余表也存在一些这样的参照关系,也有先后顺序。

(3)记录输入时出现了什么问题,原因是什么?如何解决的。

此字段参照的t表的tno字段所在列属性值没有’NULL’,所以出错。即使第四列tno 的数据类型设置为允许空值也不行。后来把该值改为t表里的属性值即可。

(4)在对表进行修改或删除时,如果语句正确,但不能正常执行,是什么原因?通过完整性约束给出具体的分析和讨论。

先删除,作为外键的那个表,在删除充当主键的那个表,这样才能删除表的参照完整性约束关系。如上:sc表参照了c表,c表充当主键,sc表充当外键,所以具体SQL语句就是:

delete from sc where cno='02'; delete from c where cno='02';

相关主题
相关文档
最新文档