数据库原理与应用数据定义.docx
《数据库原理与应用数据定义.docx》由会员分享,可在线阅读,更多相关《数据库原理与应用数据定义.docx(14页珍藏版)》请在冰豆网上搜索。
![数据库原理与应用数据定义.docx](https://file1.bdocx.com/fileroot1/2022-12/9/b2596190-1c67-43b5-8f15-38499b794064/b2596190-1c67-43b5-8f15-38499b7940641.gif)
数据库原理与应用数据定义
《数据库原理及应用》电子实验报告
题目:
SQL语言
(1)数据定义
日期
2012.10.9
姓名
党存寿
学号
20102111225
QQ
1045874070
实验环境:
WindowsXP,SqlServer2005
实验目的:
1.熟悉SqlServer2005环境
2.掌握基本表的定义、删除和修改
3.掌握索引的建立和删除
实验内容:
1.SqlServer2005的启动
SqlServer2005的启动方法:
单击“开始”按钮→“所用程序”→“MicrosoftSOLServer2005”→“SQLServerManagementStudio”。
之后将会出现如图1所示的“连接到服务器”的窗口。
图1“连接到服务器”窗口
注意:
①服务器类型选“数据库引擎”
②身份验证选“Windows身份验证”
③服务器名称的选择:
点击服务器名称的下拉菜单,然后点击“浏览更多”,之后将会出现如图2所示的“查找服务器”窗口。
然后双击数据库引擎,在数据库引擎下就能找到服务器的名称,然后选择该名称并单击“确定”按钮退回到“连接到服务器”窗口。
然后单击“连接”按钮进入SQL环境。
图2“查找服务器”窗口
2.定义基本表的语句格式
1)create语句
SQL语言使用CREATETABLE语句定义基本表,其基本格式如下:
CREATETABLE<表名>
(<列名><数据类型>[<列级完整性约束条件>]
[,<列名><数据类型>[<列级完整性约束条件>]]…
[,<表级完整性约束条件>]);
<表名>:
所要定义的基本表的名字
<列名>:
组成该表的各个属性(列)
<列级完整性约束条件>:
涉及相应属性列的完整性约束条件
<表级完整性约束条件>:
涉及一个或多个属性列的完整性约束条件
2)drop语句
当某个基本表不再需要时,可以使用DROPTABLE语句删除它。
其一般格式为:
DROPTABLE<表名>[RESTRICT|CASCADE];
注意:
基本表删除后:
①数据、表上的索引都删除
②表上的视图往往仍然保留,但无法引用
删除基本表时,系统会从数据字典中删去有关该基本表及其索引的描述。
3)alter语句
SQL语言用ALTERTABLE语句修改基本表,其一般格式为:
ALTERTABLE<表名>
[ADD<新列名><数据类型>[完整性约束]]
[DROP<完整性约束名>]
[MODIFY<列名><数据类型>];
注:
<表名>:
要修改的基本表
ADD子句:
增加新列和新的完整性约束条件
DROP子句:
删除指定的完整性约束条件
MODIFY子句:
用于修改列名和数据类型
3.基本表的定义、删除和修改
1)基本表的定义
【例1】建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。
其中学号不能为空,值是唯一的,并且姓名取值也唯一(如图3-1所示)。
键入如下命令:
CREATETABLEStudent
(SnoCHAR(9)PRIMARYKEY,
SnameCHAR(20)UNIQUE,
SsexCHAR
(2),
SageSMALLINT,
SdeptCHAR(20)
);
附:
常用完整性约束
主码约束:
PRIMARYKEY
唯一性约束:
UNIQUE
非空值约束:
NOTNULL
参照完整性约束
图3-1学生表
【例2】建立一个“课程”表Course,它由课程号Cno、课程名Cname,先行课Cpno,学分Ccredit组成,其中(Cno)为主码(如图3-2所示)。
键入如下命令:
CREATETABLECourse
(
CnoCHAR(4)PRIMARYKEY,
CnameCHAR(40),
CpnoCHAR(4),
CcreditSMALLINT,
FOREIGNKEY(Cpno)REFERENCESCourse(Cno)
);
因为先行课Cpno是参照课程号Cno的,所以定义约束:
FOREIGNKEY(Cpno)REFERENCESCourse(Cno)
【例3】建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno,Cno)为主码(如图3-3所示)。
键入如下命令:
CREATETABLESC
(
SnoCHAR(9),
CnoCHAR(4),
GradeSMALLINT,
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
);
学生选课SC表中的学号Sno和课程号Cno分别参照学生表Student和课程表Course,所以定义约束:
●FOREIGNKEY(Sno)REFERENCESStudent(Sno),
●FOREIGNKEY(Cno)REFERENCESCourse(Cno)
图3-2课程表course
图3-3学生选课表
2)基本表的删除
【例4】删除Student表
DROPTABLE Student;
【例5】删除Course表
DROPTABLECourse;
【例6】删除学生选课SC表
DROPTABLESC;
3)基本表的修改
【例7】向Student表增加“入学时间”列,其数据类型为日期时间型。
ALTERTABLEStudentADDScomeDATETIME;
注:
不论基本表中原来是否已有数据,新增加的列一律为空值(如图4所示)。
图4向Student表增加“入学时间(Scome)”列
【例8】将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数,运行结果如图5所示。
ALTERTABLECourseALTERCOLUMNSageINT;
【例9】增加课程名称必须取唯一值的约束条件,运行结果如图6所示。
ALTERTABLECourseADDUNIQUE(Cname);
【例10】直接删除属性列
ALTERTABLEStudentDropScome;
图5将年龄的数据类型由字符型改为整数
图6增加课程名称必须取唯一值的约束条件
4定义索引的语句
1)create语句
语句格式:
CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…);
用<表名>指定要建索引的基本表名字
索引可以建立在该表的一列或多列上,各列名之间用逗号分隔
用<次序>指定索引值的排列次序,升序:
ASC,降序:
DESC。
缺省值:
ASC
UNIQUE表明此索引的每一个索引值只对应唯一的数据记录
CLUSTER表示要建立的索引是聚簇索引
2)Drop语句
语句格式:
DROPINDEX<索引名>;
删除索引时,系统会从数据字典中删去有关该索引的描述。
5索引的建立和删除
1)索引的建立
唯一索引和聚簇索引的区别
●唯一值索引:
●对于已含重复值的属性列不能建UNIQUE索引
●对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。
这相当于增加了一个UNIQUE约束
●聚簇索引:
●建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。
也即聚簇索引的索引项顺序与表中记录的物理顺序一致
【例11】为学生-课程数据库中的Student,Course,SC三个表(如图7所示)建立索引。
其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。
Student
学号
Sno
姓名
Sname
性别
Ssex
年龄
Sage
所在系
Sdept
95001
李勇
男
20
CS
95002
刘晨
女
19
IS
95003
王敏
女
18
MA
95004
张立
男
19
IS
(a)
SC
学号
Sno
课程号
Cno
成绩
Grade
95001
1
92
95001
2
85
95001
3
88
95002
95002
2
3
90
80
(b)
Course
课程号
Cno
课程名
Cname
先行课
Cpno
学分
Ccredit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
5
6
7
操作系统
数据结构
数据处理
PASCAL语言
6
7
6
3
4
2
4
(c)
图7学生-课程数据库
CREATEUNIQUEINDEXStusnoONStudent(Sno);
CREATEUNIQUEINDEXCoucnoONCourse(Cno);
CREATEUNIQUEINDEXSCnoONSC(SnoASC,CnoDESC);
命令及运行结果如图8所示:
图8建立Student、Course、SC表的索引
●
●【例12】在Student表的Sname(姓名)列上建立一个聚簇索引。
●CREATECLUSTERINDEXStusnameONStudent(Sname);
●在Student表的Sname(姓名)列上建立一个聚簇索引,而
●且Student表中的记录将按照Sname值的升序存放
●在一个基本表上最多只能建立一个聚簇索引
●聚簇索引的用途:
对于某些类型的查询,可以提高查询效率
●聚簇索引的适用范围
●很少对基表进行增删操作
●很少对其中的变长列进行修改操作
2)索引的删除
【例13】删除Student表的Stusname索引。
DROPINDEXStusname;
【例14】删除Student、Course、SC表的Stusno、Coucno、SCno索引。
DROPINDEXStusnoONStudent;
DROPINDEXCoucnoONCourse;
DROPINDEXSCnoONSC;
完成情况:
1完成了对学生表Student。
课程表Course、学生选课SC表的创建、删除、修改。
2完成了对学生表Student。
课程表Course、学生选课SC表索引的创建和删除。
出现的问题:
(小四宋体)
1在完成表的索引创建任务时,遇到了消息159,级别15,状态1,第1行
必须为DROPINDEX语句指定表和索引名称。
消息159,级别15,状态1,第2行
必须为DROPINDEX语句指定表和索引名称。
消息159,级别15,状态1,第3行
必须为DROPINDEX语句指定表和索引名称。
问题,
解决思路是给每一条删除语句加上了表名。
及将语句
DROPINDEXStusno;
DROPINDEXCoucno;
DROPINDEXSCno;
改为:
DROPINDEXStusnoONStudent;
DROPINDEXCoucnoONCourse;
DROPINDEXSCnoONSC;