数据库实验二--学生选课数据库(OpenGuess)
文章目录
- 实验二要求:
- 实验二 实验内容:
- (一)实验目的:
- (二)实验内容:
- 学生选课数据库的数据:
- 过程
- 打开数据库
- 新建数据库
- 创建模式和数据表
- 查询
- 建立索引
实验二要求:
实验二 实验内容:
创建数据库、表和索引
(一)实验目的:
- 掌握如何在OpenGauss中创建用户、数据库、模式、表和索引等。
- 灵活运用SQL语句建立上述概念。
- 理解数据库用户、数据库、schema、表、索引之间的关系。
(二)实验内容:
- 创建数数据库、模式、表和索引。
- 修改基本表的结构。 在OpenGauss数据库系统中使用SQL语句(按教材上所示的属性)建立基本表,如STUDENT表、COURSE表、SC表等,并向表中填充数据。熟悉使用虚拟机进行OpenGauss中SQL语句的代码输入方式。
- 创建和删除索引 使用SQL语句在上述表中创建索引,熟悉相应的SQL语句,请参考教材P73-79页的SQL语句,请注意标准SQL和openGauss中相应SQL语句相同与不同之处。
- 操作系统:Windows系统或者openEuler。
- 数据库管理系统:
OpenGauss
。
学生选课数据库的数据:
(书中数据有不完善的地方,在输入数据时部分有修改)
过程
打开数据库
首先切换到omm
用户进行操作(参照了华为实验指导书,使用omm用户操作数据库)
su - omm
使用gs_om启动服务
gs_om -t start
使用gsql
连接数据库
gsql -d postgres -p 26000 -r
其中,postgres为openGauss安装完成后默认生成的数据库。初始可以连接到此数据库进行新数据库的创建。26000为数据库主节点的端口号,需根据openGauss的实际情况做替换,请确认连接信息获取。
引申信息:
使用数据库前,需先使用客户端程序或工具连接到数据库,然后就可以通过客户端程序或工具执行SQL来使用数据库了。
gsql是openGauss数据库提供的命令行方式的数据库连接工具。
连接数据库之后我们正式开始实验。
新建数据库
我们首先创建选课系统的数据库
创建数据库之前我们为即将要创建的数据库创建一个表空间``
CREATE TABLESPACE c_c RELATIVE LOCATION 'tablespace/c_c';
我们创建了一个叫做c_c
的表空间,我们可以使用
SELECT spcname FROM pg_tablespace;
来查看表空间
接着我们去创建数据库,并让这个数据库使用c_c
这个表空间:
CREATE DATABASE db_cc WITH TABLESPACE = c_c;
之后使用
\c db_cc
来进入到db_cc
数据库
创建模式和数据表
我们接着可以创建模式了,本实验我们要创建模式S_C,并且该模式下有六个关系(详见上图)
Departments、Teachers、Students、Courses、Teaches、SC
模式允许多个用户
创建模式的语句为:
CREATE SCHEMA<模式名> [<模式元素>]
或
CREATE SCHEMA[<模式名>]AUTHORIZATION <用户名>
我们也可以在创建模式的同时创建该模式中的对象。
我们这里先直接新建模式:
CREATE SCHEMA S_C;
接着我们创建该模式下的信息表;
由实验要求得,我们共计要创建六个表,我们在创建的时候暂时忽略表约束条件,创建完成之后再进行修改。
CREATE TABLE Teachers
( Tno char(7) PRIMARY KEY, Thame char(10) NOT NULL,Sex char(2) CHECK(Sex = '男' OR Sex = '女'),Birthday DATE,Title char(6),Dno CHAR(4)
);
CREATE TABLE Departments
( Dno char(4) PRIMARY KEY, Dhame char(10),Dheadno char(7)
);
CREATE TABLE Students
( Sno char(9) PRIMARY KEY, Shame char(10) NOT NULL,Birthday DATE,Enrollyear char(4),Speciality char(20),Dno char(4);Sex char(2)
);
注:本处我把性别的约束删除了,与课本上有了一些出入,倘若加上性别约束也不影响结果,但是请注意各列的顺序。
CREATE TABLE Courses
( Cno char(5) PRIMARY KEY, Cname char(20) NOT NULL,Period SMALLINT,Credit SMALLINT
);
CREATE TABLE Teaches
( Tno char(7) , Cno char(5),TCsores SMALLINT,PRIMARY KEY (Tno, Cno)
);
CREATE TABLE SC
( Sno char(9), Cno char(5),Grade SMALLINT CHECK(Grade >0 AND Grade <=100),PRIMARY KEY (Sno, Cno),FOREIGN KEY (Sno) REFERENCES Students (Sno),FOREIGN KEY (Cno) REFERENCES Courses (Cno)
);
创建完成后我们可以使用\dt
来查看刚刚创建的数据表:
现在,我们已经新建了六个数据表并为其添加了合适的约束条件。
接着我们按照实验要求为其添加数据库数据。
再插入数据的时候发现之前定义的字符长度有些不够,会出现报错,例如:
我们可以更改字段长度来避免这个问题:
ALTER table 表名modify 需要修改列名 char(100);
之后我们添加数据:
INSERT INTO teachers VALUES
(05001, '张海峰','1969-02-21','教授','CS', '男'),
(05002, '刘晓明','1978-10-06','副教授','CS','男'),
(05003, '王梅','1972-02-25','副教授','CS','女'),
(05004, '赵青山','1981-05-18','讲师','CS','男'),
(06001, '朱杰','1963-01-30','教授','MA','男'),
(06002, '欧阳梅','1970-08-11','副教授','MA','女');insert into courses values
('cs101' ,'计算科学导论',2,1),
('cs102','C语言',4,3),
('cs201','数据结构',4,3),
('cs202','离散数学',4,3),
('cs301','数据库系统原理',4,3);insert into departments values
('CS' ,'计算机系',05001),
('MA','数学系',06001),
('PH','物理系',07001),
('CH','化学系',08001);insert into students values
(201705001,'张华' ,'男','1999_12_16','计算机','cs'),
(201705002,'李玉','女','1998_10_17','计算机','cs'),
(201705003,'欧阳山','男','1999_05_24','计算机','cs'),
(201706001,'林艳','女','1998_09_20','数学','ma'),
(201706002,'高山','男','1997_08_16','数学','ma'),
(201706003,'王海洋','男','1997_01_30','数学','ma');insert into sc values
(201705001 ,'cs101',89),
(201705002,'cs101',91),
(201705003,'cs101',80),
(201705001,'cs102',90),
(201705002,'cs102',87),
(201705003,'cs102',82),
(201705001 ,'cs201',88),
(201705002,'cs201',89),
(201705003,'cs201',90),
(201705001,'cs202',86),
(201705002,'cs202',85),
(201705001,'cs301',92);insert into teaches values
(05001 ,'cs101',95),
(05002,'cs101',92),
(05003,'cs101',90),
(05004,'cs101',95);
还需要注意的是我们刚刚还没有添加表约束条件,我们在这里添加约束条件:
我们现在通过修改表来添加表级约束。
ALTER TABLE departments
ADD FOREIGN KEY (Dheadno) REFERENCES Teachers(Tno);
ALTER TABLE teachers
ADD FOREIGN KEY (Dno) REFERENCES departments(Dno);
ALTER TABLE students
ADD FOREIGN KEY (Dno) REFERENCES departments(Dno);
ALTER TABLE teaches
ADD FOREIGN KEY (Cno) REFERENCES Courses(Cno);ALTER TABLE teaches
ADD FOREIGN KEY (Tno) REFERENCES teachers(Tno);
查询
全部完成后我们可以使用selecr
语句来查询
建立索引
CREATE INDEX 索引名 ON 表名 (列名);
CREATE INDEX Student_Dept ON Students (Dno);
使用\di
来查看索引;
DBMS会自动为主码创建索引。
更新:
做完试验后发现几个表的列名name
被打成了hame
,一不小心就打错了,可以再改一下。
openGauss修改列名的指令和mysql的指令不太一样:
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )}RENAME [ COLUMN ] column_name TO new_column_name;
例如:
alter table students rename shame to sname;
数据库实验二--学生选课数据库(OpenGuess)相关推荐
- SQL Server 【附】创建商品管理数据库、学生选课数据库的SQL语句
附:(创建"商品管理数据库"的SQL语句) --建立"商品管理数据库"数据库-- create database 商品管理数据库 on(name='商品管理数据 ...
- 数据库 实验二 查询
一.实验内容 1.用SQL语句表示下列操作,在学生库中实现数据查询. (1)求数学系学生的学号和姓名. (2)求选修了课程的学生学号. (3)求选修001号课程的学生学号和成绩,并要求对查询结果按成绩 ...
- 查询学生选修课程管理系统java_JAVA数据库课程设计学生选课管理系统的
<JAVA数据库课程设计学生选课管理系统的>由会员分享,可在线阅读,更多相关<JAVA数据库课程设计学生选课管理系统的(59页珍藏版)>请在人人文库网上搜索. 1.一.课程设计 ...
- 建立学生选课表 mysql 语句_学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)...
学生选课数据库SQL语句45道练习题: 一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...
- 数据库数据增删改查练习题(1)——学生选课数据库
数据库数据增删改查练习题(1)--学生选课数据库 基本数据表 S(SNO,SNAME,AGE,SEX)学生 C(CNO,CNAME,TEACHER)课程 SC(SNO,CNO,GRADE)选课 练习题 ...
- 大学JAVA实验六 学生选课管理系统
学生选课管理系统 实验内容: 1.为选修课程的学生设计"学生选课数据库管理系统",能进行相关记录的插入.修改.删除和查询等操作. 2.在实现前面功能的基础上,将操作界面改为图形用户 ...
- 删除计算机系学生的选课记录6,天津理工大学+数据库实验二.doc
文档介绍: 实验报告学院(系)名称:计算机与通信工程学院姓名Touchkiss学号20125577专业计算机科学与技术班级2班实验项目实验二:复杂SQL数据操作课程名称数据库系统课程代码0668026 ...
- 学生选课数据库分析(Hadoop实验)
计算机二级全套资源,点击下载,必过考试的神器!!!! 前面我们介绍了Hadoop环境下,分析淘宝大数据案例的过程及方法,根据分析效果还不错,实验效果也体现了大数据的数据集大的一个特点.本次实验我们假设 ...
- 数据库设计之学生选课系统
版权声明:对于本博客所有原创文章,允许个人.教育和非商业目的使用,但务必保证文章的完整性且不作任何修改地以超链接形式注明原始作者.出处及本声明. 博客地址:http://blog.csdn.net/s ...
最新文章
- 基于crc32实现的内存的代码校验
- JAVA语法——汉诺塔问题
- python 用递归求质数_编写一个递归函数,它接受和整数,如果它的所有数字都是质数,则返回“True”...
- Linux学习笔记(三)|Vim编辑器
- HDU 6631 line symmetric(枚举)
- OC_KVC与KVO简单介绍
- gui编写线性调频信号_是的,我编写了信号量,不,我不是OS开发人员。
- docker-ovs遇到的问题以及解决办法
- WPF、Windows Forms和Silverlight区别
- 微信小程序和传统网页开发的区别
- 前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite
- data/mysql_error_trace.inc,09-在线挑战详细攻略-《真的很简单》
- 我的Java秋招面经大合集
- c语言判断闰年并输出该月天数,C语言宏定义实现闰年判断并输出指定月的天数...
- 用批处理调用Rundll32添加打印机命令说明文件
- 探求DVB+OTT商业模式,推动有线电视平台化运营
- Python 获取当前时间 年-月-日-时-分-秒
- 人喜欢音乐的部分原因:形成期望,不确定性
- 以太坊闪电网络实现原理
- Windows Server 2008 R2 桌面化
热门文章
- 深度学习三人行(第10期)----CNN经典网络之LeNet-5和AlexNet
- 【论文分享】ARCUS: Symbolic Root Cause Analysis of Exploits in Production Systems
- 数字化时代,个人数据何处安家?
- datawhalechina-GNN组队学习 作业:PyG不同模块在PyG数据集上的应用
- linq 调试工具 LINQPad 介绍
- 正点原子IMX6UL ADC采集
- 将Visual Basic 6.0程序转换到Visual Basic.NET
- mysql中between的用法
- 如何将VS2019的解决方案资源管理器移动到左边
- 转换BBSXP 2008到Discuz X1.5部分问题解决记录