湘潭大学数据库实验1

合集下载

数据库实验指导书1

数据库实验指导书1

数据库原理及应用实验指导书湖南工程学院计算机科学与通信学院2011年9月实验一一、实验目的:掌握建立一个数据库表结构的方法和步骤,了解数据库表的基本组成。

二、实验内容:基本表的创建和修改。

三、实验要求:(必做)硬件:Intel Pentium 120或以上级别的CPU,大于16MB的内存。

软件:Windows 95/98/2000操作系统,关系数据库管理系统SQL SERVER 2000。

学时:2学时四、实验步骤:1、用create建立教学数据库的五个基本表:(1)学生表(学号,姓名,性别,年龄),student((Sno,sname,ssex,sage) ;(2)课程表(课程号,课程名,学分),Course (Cno, Cname, credit) ;(3)选课表(学号,课程号,成绩),SC (Sno,, Cno, grade ) ;(4) 教师表(教师号,姓名,性别,出生年月,系部,职称,地址),T(Tno,Tname,ssex,birthday,dept,title,address) ;(5) 工资表(教师号,基本工资,职务工资,合计),Salary(Tno,jbgz,zwgz,hj);2、用alter修改基本表(1)在已存在的学生表student中增加一个sdept(系)的新的属性列;(2)将学生表student中sname属性列的数据类型修改为变长字符串varchar(10)。

3、建立一个临时表,然后将其删除数据库原理实验报告实验名称评分实验日期2011 年10 月9 日指导教师姓名朱旭稀专业班级计算机科学与技术0903班学号 2一、实验目的1.掌握建立一个数据库表结构的方法和步骤;2.了解数据库表的基本组成。

二、实验内容与步骤1.建立5个表create table student(Sno int not null primary key,sname varchar(20),ssex varchar(10),sage int)create table Course(Cno int not null primary key,Cname varchar(20),credit varchar(40))create table SC(Sno int not null,Cno int not null,grade float not null,primary key (Sno,Cno),foreign key (Sno) references student(Sno), foreign key (Cno) references Course(Cno),)create table T(Tno int not null primary key,Tname varchar(20),Tsex varchar(10),brithday smalldatetime,dept varchar(20),title varchar(50),adress varchar(100))create table Salay(Tno int not null primary key,jbgz float,zwgz float,hj float,foreign key (Tno) references T(Tno))2.修改基本表alter table student add dept varchar(10)alter table student alter column sname varchar(10)3.建立一个临时表,然后将其删除create table Test(id int not null primary key,name varchar(20))drop table Test三、实验结果四、程序调试及问题分析六、实验收获及体会实验二一、实验目的:了解建立索引的目的,掌握建立索引与删除索引,掌握创建、修改、删除约束。

湘潭大学数据库试卷及答案

湘潭大学数据库试卷及答案

二、设计题(共18分)1.某县要设立一个干部管理系统,请设计ER图,对此系统进行描述,要求包含乡镇和干部信息(具体为:乡镇编号,乡镇名称,人员编号,姓名,职务)。

(10分)2.按两种方式将上述概念模型转换为关系模型。

(8分)三、计算题(共20分)设有关系模式R(U,F),U=ABCDE,F=(B→C,C→D,B→D,AB→CD,A→B),求:①该关系的码是什么,并作证明.②将其分解成3NF,要求分解具有无损连接性且保持函数依赖.(20分)四、综合题(共47分)设教学数据库中有如下第三个表:S(SNO,SNAME,AGE,SEX,SDEPT),学生表(学号,姓名,年龄,性别,院系);SC(SNO,CNO,GRADE),选课号(学号,课号,成绩);C(CNO,CNAME,CDEPT,TNAME),课程表(课程号,课程名,课程所在院系,教师姓名)。

(注:中文关系或字段名称是注释)1.用关系代数式和SQL语言两种方式表示如下功能的实现:(16分)①查询教师姓名为TOM的所有课程信息;②查询学生关系中所有学生的姓名;③查询所有学生如下选课信息(姓名,课程号,成绩);④查询选修了全部课程的学生的学号;2.用SQL语言一种方式实现如下操作:(21分)①往选课表中添加如下元祖(学号20151234,课号7)(注:还没考试);②考试后修改上面添加的元组,将成绩设置为(80);③查询选修了课程号为14的课程的学生信息(学号和姓名)(要求使用IN)④删除学号为20150001学生的所有选课信息;⑤查询没有选修18号课程的学生;⑥查询其他系中比CS系所有学生年龄大的学生姓名和年龄(要求使用ANY或)⑦将上面的查询用集合函数实现;一、①查询教师姓名为TOM的所有课程信息;SELECT 课程号,课程名,院系FROM 课程表WHERE 教师姓名=”TOM”②查询学生关系中所有学生的姓名;SELECT 姓名FROM 学生WHERE EXISTS (SELECT *FROM 选课WHERE 学生.学号=学号)③查询所有学生如下选课信息(姓名,课程号,成绩);SELECT S.SNAME,CNO,GRADEFROM S,SC,CWHERE S.SNO=SC.SNO AND O=O④查询选修了全部课程的学生的学号;SELECT 学号FROM 学生WHERE NOT EXISTS (SELECT *FROM 课程WHERE NOT EXISTS(SELECT *FROM 选课WHERE 学生.学号=学号AND 课程.课程号=课程号))二、①INSERTINTO 选课号(学号,课号)VALUES(“20151234”,”7”)②UPDATE 选课号SET 成绩=80WHERE 学号=”20151234”,课号=”7”③SELECT 学号,姓名FROM 学生WHERE IN (SELECT *FROM 选课WHERE 学生.学号=学号AND 课程号=”14”)④DELETEFROM 选课WHERE 学号=”20150001”⑤SELECT 姓名FROM 学生WHERE NOT EXISTS (SELECT *FROM 选课WHERE 学生.学号=学号AND 课程号=”18”⑥SELECT 姓名,年龄FROM 学生WHERE 年龄>ANY (SELECT 年龄FROM 学生WHERE 所在系=”CS”)AND 所在系< >”CS”四、GRANT ALL PRIVILEGES ON V-MATHTO JOEWITH GRANT OPTION。

数据库实验报告(通用3篇)

数据库实验报告(通用3篇)

数据库实验报告(通用3篇)数据库试验报告篇1一、实训时间:20_年5月13日至5月24日二、实训地点:三、实训目的与意义:1,这次实习可以使我们在课本上学到的学问用于实践增加了我对电脑技巧的一些认知。

2,通过这次实习也可以让我体验到上班族的生活为我将来毕业后找工作打下了基础。

3,并且这次实习可以非常好的关心我完成将来的毕业论文。

四、实训感悟:还依旧记得来的第一天对这里很茫然,不知道实习要做些什么。

然后经过老师的急躁讲解,熟悉了自己实习要做些什么,得到了许多心理熟悉,对许多问题都有了一些更深的了解。

同时,我熟识了河北玛世电子商务有限公司,总部位于国家命名的“中国丝网之乡”、“中国丝网产业基地”、中国丝网产销基地“、”中国丝网出口基地“—河北省安平县。

使我们队公司有了更进一步的了解实习,就是在实践中学习。

经过这半个月的实习训练,我了解到自己所学的如何在实践中运用。

当然学的更多的是如何在更新网站内容和添加商品,每天不厌其烦的更新添加,观察自己的胜利更多的是兴奋。

还有发布了一些关于公司产品的博客,比如新浪,网易。

而后又尝试在百度知道上提问与回答,在回答问题的过程中,通过网站搜寻相关内容来回答各种丝网问题,通过百度知道这个平台,我对公司又了更一步的了解。

经过半个月的实训我学到了许多之前没有学过没有接触到的东西,熟悉到自己的不足,需要更加努力,才能尽快的学会在社会上生活,敢于面对社会的压力,使自己可以在社会上成长进展。

数据库试验报告篇2由于平常接触的都是一些私人项目,这些项目大都是一些类库,其他人的沟通相对可以忽视不计,因此也就不考虑规范化的文档。

实际上从学习的经受来看,我们接触的学问体系都是属于比较老或比较传统的,与现在进展快速的IT行业相比许多状况已不再适用,尤其是当开源模式渐渐走近开发者后更是如此。

虽然这次是一个数据库课程设计,由于本人在选择项目的时候是本着对自己有实际应用价值的角度考虑的,所以其中也涉及到一些数据库以外的设计。

数据库实验报告

数据库实验报告

实验(一): 熟练掌握SQL语言实验目的:熟悉上机环境,创建数据库,在数据库上建立关系模式,插入数据,进行相应的查询操作。

实验内容:具体包括如下三部分。

一、熟悉上机环境。

客户/服务器结构,数据库服务器在一台NT服务器上,同学们通过客户机(操作系统为Windows 2000)上安装的SQL Server客户端程序, 使用SQL Server数据库服务器。

具体包括:1.了解SQL Server 环境。

鼠标点击开始,进入“Microsoft SQL Server→企业管理器”,点击SQL Server组下的数据库服务器(服务器名称为NEUC-201S(Windows NT)), 可以看到服务器上的圆形标志变为绿色,说明客户端程序已与服务器连接成功。

点击服务器(NEUC-201S(Windows NT))下的数据库,可以看到服务器上已建立的数据库,你可访问你有权访问的数据库,并进行相应的操作功能。

因为,数据库服务器上建有许多数据库, 每个数据库都有一些合法的用户。

2.鼠标点击开始,进入“Microsoft SQL Server→查询分析器”,输入用户名和口令,进入SQL查询分析器。

如:你登录的客户机为27号,那么请以用户名user27,口令为user27登录,登录后缺省连到数据库user27上,user27/user27是数据库user27的创建者,因此用户user27/ user27具有在数据库user27上创建表等一切权力。

3.在SQL查询分析器环境下,你就可进行SQL命令语句操作了。

二、在数据库useri上创建学生选课有关关系模式,并插入相应的数据,实现有关查询。

1.描述学生、课程情况的E-R图如下,请将其转化为用关系数据模型描述的关系模式CREA TE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(20) UNIQUE,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20));CREA TE TABLE Course(Cno CHAR(4) PRIMARY KEY,Cname CHAR(40),Cpno CHAR(4),Ccredit SMALLINT,FOREIGN KEY (Cpno) REFERENCES Course(Cno) );CREA TE TABLE SC(Sno CHAR(9),Cno CHAR(4),Grade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno) REFERENCES Student(Sno), FOREIGN KEY(Cno) REFERENCES Course(Cno) );4在已建立的关系模式之上(已插入一些数据)建立主键约束,参照约束和用户定义的约束(要求学生年龄不小于14岁,不大于35岁),如果约束不能建立,请分析原因,修改后建立上述约束。

数据库系统实验课实验报告

数据库系统实验课实验报告

数据库系统实验课实验报告一、实验目的数据库系统实验课是一门重要的实践课程,旨在通过实际操作和实验,深入理解数据库系统的原理和应用,提高我们的数据库设计、管理和应用开发能力。

本次实验的具体目的包括:1、熟悉数据库管理系统(DBMS)的操作环境和基本命令。

2、掌握数据库的创建、表的设计、数据的插入、查询、更新和删除等基本操作。

3、学会使用 SQL 语句进行复杂的数据查询和数据处理。

4、理解数据库的完整性约束、索引和存储过程的概念及应用。

5、培养解决实际数据库问题的能力和团队协作精神。

二、实验环境本次实验使用的数据库管理系统是 MySQL 80,实验在 Windows 10 操作系统上进行。

使用的开发工具包括 MySQL Workbench 和命令行终端。

三、实验内容1、数据库的创建使用 CREATE DATABASE 语句创建了一个名为“student_management”的数据库,用于存储学生管理相关的数据。

2、表的设计在“student_management”数据库中,设计了以下几张表:“students”表,包含学生的学号(student_id)、姓名(student_name)、性别(gender)、年龄(age)等字段。

“courses”表,包含课程的课程号(course_id)、课程名称(course_name)、学分(credit)等字段。

“enrolls”表,用于记录学生选课的信息,包含学号(student_id)、课程号(course_id)、成绩(grade)等字段。

在设计表时,为每个字段选择了合适的数据类型,并设置了主键和外键约束,以保证数据的完整性和一致性。

3、数据的插入使用 INSERT INTO 语句向“students”、“courses”和“enrolls”表中插入了一些示例数据,以便进行后续的查询和操作。

4、数据的查询使用简单的 SELECT 语句查询了“students”表中的所有学生信息。

湘潭大学数据库实验1

湘潭大学数据库实验1
《数据库原理》 实验教学指导书
实验一 数据模型设计与实现
撰写人:郭云飞
湘潭大学 信息工程学院 二○一五年三月
实验一 数据模型设计与实现
一.上机目的
1.了解并掌握数据模型的设计。 2.了解并掌握 Oracle 中的用 Create 命令定义表的方法,以及表的完整性定义。 3.了解并掌握 Oracle 中的用 Alter 命令和 Drop 命令对表的修改和删除。
其类型为 char,长度为 1。取值 0,1,2,3,默认值为 0(在校学习)。 每一个开课在选课前都有人数限制,选课后有选课人数统计。在 section 中将属性用 rs 表示。 将 takes 中 grade 由等级制改成百分制。 课程有公共基础课(1,2)与专业课,专业课有必修(3)与选修(4)。课程在第几学期开设都有规定。在
如:给 EMP1 增加一个属性 ALTER TABLE EMP1 ADD (SPOUSES_NAME CHAR(10));
MODIFY 关键字可以用来修改已存在的数据表定义。 如:把 EMP 中 ENAME 长度改为 25 个字符 ALTER TABLE EMP1 MODIFY (ENAM CHAR(25));
3. CREATE TABLE 命令 1)、CREATE TABLE table_name( column_name type(size), column_name type(size), …);
例如: CREATE TABLE student(
id VARCHAR2(10), name VARCHAR2(12), age NUMBER(2));
DROP 关键字可以用来删除已存在数据表的约束。 如:把 EMP 中主键删除 ALTER TABLE EMP1 DROP PRIMARY KEY;

湘潭大学 数据结构实验1 实验报告 源代码 线性表基本操作

湘潭大学 数据结构实验1 实验报告 源代码 线性表基本操作

“数据结构和算法II”课程实验报告实验名称:线性表的存储结构定义及基本操作班级姓名学号实验日期:实验机时:2 学时实验成绩:-------------------------------------------------------------------------------一.实验目的:1.掌握线性表的逻辑特征2.掌握线性表顺序存储结构的特点,熟练掌握顺序表的基本运算3.熟练掌握线性表的链式存储结构定义及基本操作4.理解循环链表和双链表的特点和基本运算5.加深对栈结构的理解,培养解决实际问题的编程能力。

6.加深对顺序存储数据结构的理解和链式存储数据结构的理解,逐步培养解决实际问题的编程能力二.实验内容:(1)基本实验内容:建立顺序表,完成顺序表的基本操作:初始化、插入、删除、逆转、输出、销毁, 置空表、求表长、查找元素、判线性表是否为空;建立单链表,完成链表(带表头结点)的基本操作:建立链表、插入、删除、查找、输出;其它基本操作还有销毁链表、将链表置为空表、求链表的长度、获取某位置结点的内容、搜索结点。

(2)扩展实验内容:查前驱元素、查后继元素、顺序表合并,两个有序单链表的合并操作等。

三.程序及注释:1.顺序表:#include<stdio.h>#include<stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef int status ;typedef int ElemType ;typedef struct{ElemType *elem;int length,listsize;}SqList;status InitList(SqList &L)//初始化{L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem) exit(OVERFLOW);L.listsize=LIST_INIT_SIZE;L.length=0;return OK;}status Build(SqList &L)//建立表{int i,n;printf("请输入元素个数n和n个元素\n");scanf("%d",&n);if(n>LIST_INIT_SIZE)//如果n大于当前空间{L.elem=(ElemType *)realloc(L.elem,(n+LISTINCREMENT)*sizeof(ElemType));if(!L.elem) exit(OVERFLOW);L.listsize=n+LISTINCREMENT;}for(i=0;i<n;i++)scanf("%d",L.elem+i);L.length=n;return OK;}void Print(SqList &L)//输出表中元素和长度{int i;for(i=0;i<L.length;i++)printf("%d ",*(L.elem+i));printf("\n长度为:%d\n\n",L.length);}void Tips()//提示函数{printf("请选择你的想要的操作:\n");printf("<1> 输出顺序表及顺序表的长度\n");printf("<2> 删除值为x的结点\n");printf("<3> 删除给定位置i的结点\n");printf("<4> 将顺序表逆置\n");printf("<5> 将顺序表按升序排序\n");printf("<6> 将x插入到顺序表的适当位置上\n");printf("<7> 将两个有序表合并\n");printf("<0> 退出\n\n");}status ListDelete1(SqList &L,int x)//删除值为X的元素{int i;for(i=0;i<L.length;i++)if(*(L.elem+i)==x)break;if(i==L.length)return ERROR;for(i++;i<L.length;i++)*(L.elem+i-1)=*(L.elem+i);L.length--;return OK;}status ListDelete2(SqList &L,int x)//删除第X个元素{int i;if(x<0||x>=L.length)return ERROR;for(i=x+1;i<L.length;i++)*(L.elem+i-1)=*(L.elem+i);L.length--;return OK;}void Inverse(SqList &L)//逆置函数{int i,t;for(i=0;i<L.length/2;i++){t=*(L.elem+i);*(L.elem+i)=*(L.elem+L.length-i-1);*(L.elem+L.length-i-1)=t;}}void Sort(SqList &L)//冒泡排序(升序){int i,j,t;for(i=1;i<L.length;i++)for(j=0;j<L.length-i;j++){if(*(L.elem+j)>*(L.elem+j+1)){t=*(L.elem+j);*(L.elem+j)=*(L.elem+j+1);*(L.elem+j+1)=t;}}printf("已按升序排列\n\n");}status ListInsert(SqList &L,int x)//将X插入,使仍然有序{int i,k;if(L.length>=L.listsize){L.elem=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW);L.listsize+=LISTINCREMENT;}for(i=0;i<L.length;i++)if(x<*(L.elem+i))break;k=i;for(i=L.length;i>k;i--)*(L.elem+i)=*(L.elem+i-1);*(L.elem+k)=x;L.length++;return OK;}status Merger(SqList &L,SqList &Lb)//合并两个线性表{int i,j,k;SqList Lc;InitList(Lc);if(Lc.listsize<L.length+Lb.length){Lc.elem=(ElemType *)realloc(Lc.elem,(L.length+Lb.length+LISTINCREMENT)*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW);Lc.listsize=L.length+Lb.length+LISTINCREMENT;}i=j=k=0;while(i<L.length && j<Lb.length){if(*(L.elem+i) < *(Lb.elem+j)){*(Lc.elem+k)=*(L.elem+i);k++;i++;}else{*(Lc.elem+k)=*(Lb.elem+j);k++;j++;}}while(i<L.length){*(Lc.elem+k)=*(L.elem+i);k++;i++;}while(j<Lb.length){*(Lc.elem+k)=*(Lb.elem+j);k++;j++;}Lc.length=L.length+Lb.length;L=Lc;return OK;}int main(){int op,x,flag;SqList L,Lb;InitList(L);Build(L);Tips();scanf("%d",&op);while(op){switch(op){case 1:Print(L);case 2:printf("请输入要删除的数据X:\n");scanf("%d",&x);flag=ListDelete1(L,x);if(flag)printf("删除成功!!\n\n");elseprintf("元素不存在,删除失败!!\n\n");break;case 3:printf("请输入要删除的位置i:\n");scanf("%d",&x);flag=ListDelete2(L,x-1);//第i个元素对应的下标为i-1 if(flag)printf("删除成功!!\n\n");elseprintf("元素不存在,删除失败!!\n\n");break;case 4:Inverse(L);break;case 5:Sort(L);break;case 6:printf("请输入要插入的数据X:\n");scanf("%d",&x);flag=ListInsert(L,x);if(flag)printf("插入成功!!\n\n");elseprintf("插入失败!!\n\n");break;case 7:printf("请输入Lb的内容:\n");InitList(Lb);Build(Lb);flag=Merger(L,Lb);if(flag)printf("合并成功!!\n\n");break;}Tips();scanf("%d",&op);}2.单链表typedef int ElementType;#ifndef _List_H#define _List_Hstruct Node;typedef struct Node *PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;List MakeEmpty( List L );int IsEmpty( List L );int IsLast( Position P, List L );Position Find( ElementType X, List L );void Delete( ElementType X, List L );Position FindPrevious( ElementType X, List L );void Insert( ElementType X, List L, Position P );void DeleteList( List L );Position Header( List L );Position First( List L );Position Advance( Position P );ElementType Retrieve( Position P );#endif#include <stdio.h>#include <stdlib.h>#define Error( Str ) FatalError( Str )#define FatalError( Str ) fprintf( stderr, "%s\n", Str ), exit( 1 ) struct Node{ElementType Element;Position Next;};List MakeEmpty( List L ) //创建空链表{if( L != NULL )DeleteList( L );L = malloc( sizeof( struct Node ) );if( L == NULL )FatalError( "Out of memory!" );L->Next = NULL;return L;}int IsEmpty( List L )//判断链表是否为空{return L->Next == NULL;}int IsLast( Position P, List L ){return P->Next == NULL;}Position Find( ElementType X, List L )//精确查找函数{Position P;P = L->Next;while( P != NULL && P->Element != X ){P = P->Next;n++;}if(P==NULL)printf("查找的成员不存在!!\n\n");elseprintf("查找的成员位于链表第%d位\n\n",n); }void Delete( ElementType X, List L )//精确删除函数{Position P, TmpCell;P = FindPrevious( X, L );if( !IsLast( P, L ) ){TmpCell=P->Next;P->Next=TmpCell->Next;free( TmpCell );}}Position FindPrevious( ElementType X, List L )//前驱查找函数{Position P;P = L;while( P->Next != NULL && P->Next->Element != X )P = P->Next;return P;}void Insert( ElementType X, List L, Position P )//元素插入函数{Position TmpCell;TmpCell = malloc( sizeof( struct Node ) );if( TmpCell == NULL )FatalError( "Out of space" );TmpCell->Element = X;TmpCell->Next = P->Next;P->Next = TmpCell;}void DeleteList( List L )//清空链表函数{Position P, Tmp;P = L->Next;L->Next = NULL;while( P != NULL ){Tmp = P->Next;free( P );P = Tmp;}if(IsEmpty(L))printf("链表清空成功!\n\n");}Position Header( List L )//表头调用函数{return L;}Position First( List L )//首元素调用函数{return L->Next;}Position Advance( Position P )//元素递进函数{return P->Next;}void show(List L)//显示链表函数{if(!IsEmpty(L)){Position p;p=First(L);printf("当前链表成员如下:\n");while(p!=NULL){printf("%d ",p->Element);if(Advance(p))p=Advance(p);else{printf("\n\n");break;}}}elseprintf("当前链表为空!!\n\n"); }void join(List L) //插入函数调用函数{int x,n,i;Position p=Header(L);printf("请输入需要插入的成员:\n");scanf("%d",&x);printf("需要将成员插入到第几位呢?\n");scanf("%d",&n);for(i=1;i<n;i++){p=p->Next;}Insert(x,L,p);show(L);}void find(List L)//查找函数调用函数{printf("请输入需要查找的成员:\n");int x;scanf("%d",&x);Find(x,L);}void count(List L)//链表长度统计函数{Position p;p=First(L);int n=0;while(p!=NULL){n++;if(Advance(p))p=Advance(p);elsebreak;}printf("当前链表长度为:%d\n\n",n);}void direction(List L)//位置访问函数{int n,i;Position p=Header(L);printf("请输入n的值:\n");scanf("%d",&n);for(i=0;i<n;i++){p=p->Next;}printf("第%d位成员为:%d\n\n",n,p->Element);}void change(List L)//修改元素函数{printf("请输入n的值:\n");int x,n,i;scanf("%d",&n);printf("请输入修改后的值:\n");scanf("%d",&x);Position p=Header(L);for(i=0;i<n;i++){p=p->Next;}p->Element=x;show(L);}void deletion(List L)//删除函数调用函数{printf("你要删除的成员是:\n");int x;scanf("%d",&x);Delete(x,L);show(L);}void main(){ List L;L=MakeEmpty(NULL);printf("请输入需要插入的成员个数:\n");int n;scanf("%d",&n);printf("请输入需要插入的成员以空格隔开:\n");int i;Position p;p=Header(L);for(i=0;i<n;i++){int x;scanf("%d",&x);Insert(x,L,p);p=Advance(p);}show(L);printf("请选择需要进行的操作:\n 1.计算链表长度\n 2.取第n个位置成员\n 3.修改第n个位置成员\n 4.在第n位插入新成员\n 5.删除成员\n 6.搜索成员\n 7.销毁链表\n 8.退出\n你输入的选项是:");scanf("%d",&n);while(n!=8){switch(n){case 1:count(L);break;case 2:direction(L);break;case 3:change(L);break;case 4:join(L);break;case 5:deletion(L);break;case 6:find(L);break;case 7:DeleteList(L);break;}printf("请选择需要进行的操作:\n 1.计算链表长度\n 2.取第n个位置成员\n 3.修改第n个位置成员\n 4.在第n位插入新成员\n 5.删除成员\n 6.搜索成员\n 7.销毁链表\n 8.退出\n你输入的选项是:");scanf("%d",&n);}}四.运行结果:1.顺序表:3.单链表:五.实验心得:通过这次写实验报告,我深切的理解了这门课的本质。

《数据库原理及应用》实验报告(1-21)

《数据库原理及应用》实验报告(1-21)

数据库原理及应用实验报告实验课程:数据库原理及应用学号:学生姓名:班级:2014年月日实验一创建和维护数据库一、实验目的(1)掌握在Windows 平台下安装与配置MySQL 5.5 的方法。

(2)掌握启动服务并登录MySQL 5.5 数据库的方法和步骤。

(3)了解手工配置MySQL 5.5 的方法。

(4)掌握MySQL 数据库的相关概念。

(5)掌握使用Navicat 工具和SQL 语句创建数据库的方法。

(6)掌握使用Navicat 工具和SQL 语句删除数据库的方法。

二、实验要求(1)学生提前准备好实验报告,预习并熟悉实验步骤;(2)遵守实验室纪律,在规定的时间内完成要求的内容;(3)1~2人为1小组,实验过程中独立操作、相互学习。

三、实验内容及步骤(1)在Windows 平台下安装与配置MySQL 5.5.36 版。

(2)在服务对话框中,手动启动或者关闭MySQL 服务。

(3)使用Net 命令启动或关闭MySQL 服务。

(4)分别用Navicat 工具和命令行方式登录MySQL。

(5)在my.ini 文件中将数据库的存储位置改为D:\MYSQL\DATA。

(6)创建数据库。

①使用Navicat 创建学生信息管理数据库gradem。

②使用SQL 语句创建数据库MyDB。

(7)查看数据库属性。

①在Navicat 中查看创建后的gradem 数据库和MyDB 数据库的状态,查看数据库所在的文件夹。

②利用SHOW DATABASES 命令显示当前的所有数据库。

(8)删除数据库。

①使用Navicat 图形工具删除gradem 数据库。

②使用SQL 语句删除MyDB 数据库。

③利用SHOW DATABASES 命令显示当前的所有数据库。

(9)使用配置向导修改当前密码,并使用新密码重新登录。

(10)配置Path 变量,确保MySQL 的相关路径包含在Path 变量中。

四、思考题My SQL的数据库文件有几种?扩展名分别是什么?五、实验总结1、收获2、存在的问题实验二管理表一、实验目的(1) 掌握表的基础知识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据库原理》实验教学指导书实验一数据模型设计与实现撰写人:郭云飞湘潭大学信息工程学院二○一六年四月实验一数据模型设计与实现一.上机目的1.了解并掌握数据模型的设计。

2.了解并掌握Oracle中的用Create命令定义表的方法,以及表的完整性定义。

3.了解并掌握Oracle中的用Alter命令和Drop命令对表的修改和删除。

二.预备知识1.E-R图图例图例一(教材第5版)矩形,表示实体集菱形,表示联系集线段椭圆,表示属性下划线标识主键属性图例二(教材第6版)矩形,表示实体集菱形,表示联系集线段属性在实体矩形内列出下划线标识主键属性2.Oracle数据类型3.CREATE TABLE命令1)CREATE TABLE table_name( column_name type(size), column_name type(size), …);2)CREATE TABLE table_name [(column_name,…)] AS SELECT statement;新建一张表,用于保存查询结果。

4.完整性约束Oracle允许用户为表和列定义完整性约束来增强一定的规则。

可分为:表约束和属性约束1)NOT NULL约束NOT NULL约束保证属性值不能为NULL。

没有NOT NULL约束的属性,值可以为NULL。

2)UNIQUE约束指定一个属性或者属性的集合为唯一键。

在表中没有两行具有相同的值。

如果唯一键是基于单条记录的,NULL是允许的。

表约束命令格式:,[CONSTRAINT constraint_name] UNIQUE (Column, Column, …)属性约束命令格式:[CONSTRAINT constraint_name] UNIQUE3)主键约束(Primary Key Constraint)主键约束强制属性和属性集合的唯一性,并且用一个唯一索引来管理它。

每个表中只能用一个主键,这样可以通过主键来标识表中的每条记录。

NULL值不允许在主键属性出现。

表约束命令格式:,[CONSTRAINT constraint_name] PRIMARY KEY (Column, Column, …)属性约束命令格式:[CONSTRAINT constraint_name] PRIMARY KEY4)外键约束外键提供表内或表间的完整性规则。

外键必须依赖于一个primary或unique key。

表约束命令格式:,[CONSTRAINT constraint_name] FOREIGN KE Y (Column, Column, …) REFERENCE S table (column, column, …)属性约束命令格式:[CONSTRAINT constraint_name] FOREIGN KEY table (column)5)Check约束CHECK约束定义了每条记录必须满足的条件语法:[CONSTRAINT constraint_name] CHECK (condition)5.ALTER TABLE命令ALTER TABLE命令可用来修改数据表的定义。

6.DROP TABLE命令用DROP TABLE命令删除Oracle数据表的定义。

命令格式:DROP TABLE table_name [CASCADE CONSTRAINT];CASCADE CONSTRAINT选项说明了也把完整性约束一起删除。

注意:●D ROP TABLE也把数据表中的数据删除。

●数据表的VIEWS和SYNOMNYMS保留下来,但它们变成了不合法的。

●任何悬而未决的事务将被提交。

●只有数据表的生成者或DBA才有权删除它。

三.示例1.根据查询结果创建表CREATE TABLE DEPT1 ASSELECT DEPTNO,DNAME,LOC FROM DEPT WHERE 1=1;用DESCRIBE命令查看DEPT1表的结构。

输入命令:DESCRIBE DEPT1表结构显示如下:Name Null? TypeDEPTNO NOT NULL NUMBER(2)DNAME V ARCHAR2(14)LOC V ARCHAR2(13)2.创建表EMP1CREATE TABLE EMP1(EMPNO NUMBER(4) PRIMARY KEY,ENAME V ARCHAR2(10),JOB V ARCHAR2(10),MGR NUMBER(4),HIREDA TE DATE,SAL NUMBER(7,2),COMM NUMBER(7,2),DEPTNO NUMBER(2) ,CONSTRAINT fk_emp1 FOREIGN KEY (DEPTNO) REFERENCES DEPT, CONSTRAINT chk_sal CHECK( SAL > 0 ));其中fk_emp1与chk_sal是一个约束名。

用DESCRIBE命令查看EMP1表的结构。

输入命令:DESCRIBE EMP1表结构显示如下:Name Null? TypeEMPNO NOT NULL NUMBER(4)ENAME V ARCHAR2(10) JOB V ARCHAR2(10) MGR NUMBER(4)HIREDA TE DATESAL NUMBER(7,2)COMM NUMBER(7,2)DEPTNO NOT NULL NUMBER(2)3.给数据表EMP1增加一个属性ageALTER TABLE EMP1ADD (AGE NUMBER(2));输入命令:DESCRIBE EMP1表结构显示如下:Name Null? TypeEMPNO NOT NULL NUMBER(4)ENAME V ARCHAR2(10) JOB V ARCHAR2(10) MGR NUMBER(4)HIREDA TE DATESAL NUMBER(7,2)COMM NUMBER(7,2)DEPTNO NOT NULL NUMBER(2)AGE NUMBER(2)4.用ALTER的MODIFY关键字修改已存在的属性的定义如:把EMP1中ENAME长度改为12个字符ALTER TABLE EMP1MODIFY (ENAME V ARCHAR2(12));5.用ALTER的RENAME关键字对属性重命名如:把EMP1中HIREDATE重命名为gyrqALTER TABLE EMP1RENAME COLUMN HIREDA TE TO gyrq ;6.用ALTER的DROP命令删除一个属性ALTER TABLE EMP1DROP COLUMN JOB;或同时删除多个属性ALTER TABLE EMP1DROP (JOB, MGR);7.用ALTER的DROP关键字可以用来删除表的主键。

ALTER TABLE EMP1DROP PRIMARY KEY;8.用ALTER的ADD关键字给表添加主键。

ALTER TABLE DEPT1ADD PRIMARY KEY(deptno);9.用ALTER的DROP关键字删除外键约束。

ALTER TABLE EMP1DROP CONSTRAINT fk_emp1;10.用ALTER的ADD关键字给表添加外键。

ALTER TABLE EMP1ADD CONSTRAINT fk_emp2FOREIGN KEY(DEPTNO) REFERENCES DEPT1;11.用ALTER的ADD关键字给表添加检查约束条件ALTER TABLE EMP1ADD CONSTRAINT chk_age CHECK(AGE BETWEEN 18 AND 65);12.用ALTER的DROP关键字删除表检查约束条件ALTER TABLE EMP1ADD CONSTRAINT chk_sal;如果不知道约束的名字,可以执行如下命令:select table_name,constraint_name, search_condition from user_constraints;13.D ROPTABLE命令删除表DROP TABLE EMP1;四.实验内容1.创建教材中的大学数据库,E-R模型见教材。

(参考:/)2.修改大学数据库中的表∙因为教师有可能由于各种原因不再任课。

因此,在instructor中增加一个rk属性,其类型为char(1),取值1或0,分别表示任课或不任课,默认值为1。

∙在department中增加属性rs,表示该系任课教师人数。

∙学生状态,或在校学习(0),或毕业(1)、或结业(2)、或退学(3)等,在student中增加一个zt属性,其类型为char,长度为1。

取值0,1,2,3,默认值为0(在校学习)。

∙每一个开课在选课前都有人数限制,选课后有选课人数统计,在section中用属性rs表示。

∙将takes中grade由等级制改成百分制。

∙课程类型有公共基础课(1,2)与专业课,专业课有必修(3)与选修(4)。

课程在第几学期开设都有规定。

在course中增加两个属性,lx:用1、2、3、4表示课程类型;xq:用1-8与0表示学期,0表示该课程不再开设。

3.创建银行储蓄与借贷管理数据库bank。

(参考:/,教材第5版)①E-R模型先用Powerdesigner等工具画出该系统的E-R模型,如下:②关系模型根据E-R模型转换成关系数据模型(为方便,将属性名中的“-”(减号)改为下划线),如下:branch(branch_name, branch_city, assets)主关键字:branch_namecustome(customer_name, customer-street, customer_city)主关键字:customer_nameaccount(account_number, branch_name, balance)主关键字:account_number外部关键字:branch_nameloan(loan-number, branch_name, amount)主关键字:loan_number外部关键字:branch_namedepositor(customer_name, account_number)主关键字:customer_name, account_number外部关键字1:customer_name外部关键字2:account_numberborrower(customer_name, loan_number)主关键字:customer_name, loan_number外部关键字1:customer_name外部关键字2:loan_number③关系模型的说明④创建数据库用CREATE TABLE在Oracle中实现该模型。

相关文档
最新文档