重庆邮电大学数据库实验报告
发布时间:2024-11-17
发布时间:2024-11-17
实验 一 PowerDesigner的CDM应用
学号 姓名
一、实验内容
用PowerDesigner设计概念数据模型。
二、遇到的问题及解决
说实话第一次实验比较简单,而且实验指导书讲解得非常的详细,所以我按部就班地做一会儿就做出来了,有一点小问题就是在设置主键的时候勾选到F了,后来一想主键应该是Primary key才对,F应该是Foreign key,然后修改过来了。
三、心得体会
用PowerDesigner设计概念模型非常的方便,这方便我们在以后将概念数据模型转换为屋里数据模型。
实验 二PowerDesigner的PDM应用
学号 姓名
一、实验内容
将PowerDesigner的概念数据模型转换为物理数据模型。
/*==============================================================*/ /* DBMS name: MySQL 5.0 */
/* Created on: 2014-3-18 19:57:37 */
/*==============================================================*/
drop table if exists Bookstore;
drop table if exists address;
drop table if exists buybook;
drop table if exists customer;
/*==============================================================*/ /* Table: Bookstore */
/*==============================================================*/ create table Bookstore
(
storeId char(6) not null,
storename varchar(30),
Address varchar(60),
city varchar(20),
prevence varchar(20),
code char(6),
primary key (storeId)
);
/*==============================================================*/ /* Table: address */
/*==============================================================*/ create table address
(
AddressType char(2),
CustomerID varchar(10),
Address1 varchar(50),
Address2 varchar(50),
City varchar(20),
State varchar(15),
zipcode char(6) not null,
primary key (zipcode)
);
/*==============================================================*/ /* Table: buybook */
/*==============================================================*/ create table buybook
(
CustomerID varchar(10) not null,
storeId char(6),
primary key (CustomerID)
);
/*==============================================================*/ /* Table: customer */
/*==============================================================*/ create table customer
(
CustomerID varchar(10) not null,
AccountBalance decimal(10,2),
FirstName varchar(10),
LastName varchar(20),
CompanyName varchar(40),
primary key (CustomerID)
);
alter table address add constraint FK_livein foreign key (CustomerID)
references customer (CustomerID) on delete restrict on update restrict;
alter table buybook add constraint FK_buybook foreign key (CustomerID)
references customer (CustomerID) on delete restrict on update restrict;
alter table buybook add constraint FK_buybook2 foreign key (storeId)
references Bookstore (storeId) on delete restrict on update restrict;
二遇到的问题及解决
这次试验的难度有所提升,所以问题开始多了起来,总共遇到两个问题,1.在生成PDM的过程中会包两个错误,思考了很久,我看到错误提示是关于key(键)的,由于有一个关系没有设置主键,所以产生PDM的时候会报错,于是我把那个关系设置了一个主键问题就解决了。2.运行sql文件中的语句时出现的错误,在生成sql文件的时候生成的是中文语句,于是我要把所有的中文词汇替换成对应的英文,在替换中出现了一点小错误,按照命令提示的错误我找到了错误的地方,修改后能正常运行,建立好了数据库。
三心得体会
这是第一次用命令提示符创建好了数据库,虽然现在主流一般都用数据库管理工具,但是掌握好这一技能也是必要的,这次虽然遇到很多错误,但是收获很大,让我明白了数据库的严谨性,不能有一点的错误。
实验 三 Navicat for MySQL的使用基础
学号 姓名
一实验内容
对在Navicat中mysql的基础使用进行学习。
二遇到的问题及解决
这次我们的是Navicat的可视化操作,所以很简单,一般这种发生的问题不过都是有一些功能找不到菜单,然后问问同学和老师就解决了。
三心得体会
我发现Navicat是一个非常好用而且界面简洁的数据库可视化工具,就算不会数据库语言的人也能轻松的建表,而且功能非常齐全,建表,查看,修改,都有对应的可视化操作菜单,但是我觉得还是应该尽量用数据库语言对数据库进行操作,这样不管有没有可视化工具我们都能游刃有余的操作数据库。
实验 四 SQL语言数据定义语言DDL
学号 姓名
一实验内容
学会使用SQL语言中的CREATE,DROP,ALTER语句对数据库的相关操作。
1.create table student(
studentid varchar(10),
name varchar(20),
sex varchar(2),
age integer,
Fee decimal(10,2),
address varchar(50),
memo varchar(300)
);
2.create table CourseAa(
Aa1 varchar(20),
Aa2 Integer,
Aa3 decimal(10)
);
3.create table ChooseBb(
Bb1 varchar(30),
Bb2 Integer,
Bb3 decimal(6)
);
6.drop table CourseAa;
7.alter table Choosebb add Bb4 varchar(20) default '系统测试值' not null ;
8.alter table ChooseBb add Bb5 varchar(10) primary key;
9.create view View_Choosebb(View_bb1,View_bb2,View_bb3) as select Bb1,Bb4,Bb5 from
ChooseBb;
10.drop view View_Choosebb;
11.create index Index_bb2 on ChooseBb ( Bb2 ASC);
create index Index_bb4 on Choosebb(bb4 desc);
12.drop index Index_bb2 on choosebb;
二遇到的问题及解决
在创建表的时候要定义一些数据结构,每个数据结构之间要用逗号隔开,而且最后一个之后不能打逗号,必须严格的按照sql的语法来实现,否则会报错。而且尽量避免使用DROP语句,否则如果错删除表是很难恢复的。
三心得体会
上次我们用的都是用的可视化菜单来操作数据库,这次是用sql的语句,除了一些小细节,其他的方面还好,都能得到正确的答案。
实验 五 SQL语言数据操纵语言DML
学号 姓名
一实验内容:用sql语句INSERT,UPDATE,DELETE对数据库表进行操作。
创建test表
3.create table test(
Name varchar(20),
age Integer,
Score Numeric(10,2),
Address varchar(60)
);
4.向test插入数据:
insert into test values ('赵一',20,580.00,'重邮宿舍12-3-5'),
('钱二',19,540.00,'南福苑5-2-9'),('孙三',21,555.50,'学生新区21-5-15'),('李四',22,505.00,'重邮宿舍8-6-22'),
('周五',20,495.50,'学生新区23-4-8'),('吴六',19,435.00,'南福苑2-5-12');
5.创建test_temp表
create table test_temp(
Name varchar(20),
age Integer,
Score Numeric(10,2),
Address varchar(60)
);
6.向test_temp插入数据:
insert into test_temp values('郑七',21,490.50,'重邮宿舍 11 -2-1'),('张八',20,560.00,'南福苑 3-3-3'),('王九',10,515.00,'学生新区 19 -7-1');
7.insert into test select * from test_temp;
8.update test set Score=Score+5 where age<=20;
9.update test set age=age-1 where Address like '南福苑%';
10.delete from test where age>=21 and Score>=500;
11.delete from test where Score<550 and Address like '重邮宿舍%';
二遇到的问题及解决
这个实验中要求插入多组数据,一开始只是写多个INSERT数据进行插入,觉得这样很麻烦,后来发现INSERT后面接多个数据也可以插入,于是插入数据变得简单了很多。
三心得体会
终于我们能够用sql语句插入数据了,可以将数据存储到数据库中进行保存,但是这只是入门的知识,后面还要对数据库的的结构进行优化,这样存储的效率才能更高效。
实验
学号 姓名
一、实验内容
数据查询语言指对数据库中的数据查询、统计、分组、排序等操作。查询语句可以分为简单查询、连接查询、嵌套查询和组合查询等。
SELECT * FROM student WHERE EXISTS(SELECT College FROM student WHERE Name='张三') AND College=(SELECT College FROM student WHERE Name='张三')AND Name!='张三';
SELECT CourseID,CourseName FROM course WHERE CourseBeforeID IS NULL;
SELECT SNO,Name FROM student WHERE College='计算机学院';
SELECT *FROM student WHERE age BETWEEN 20 AND 23;
SELECT choose.SNO,Score FROM student,choose WHERE CourseID='C1' AND choose.SNO=student.SNO AND Score<(SELECT Score FROM student,choose WHERE CourseID='C1'AND Name='张三'AND choose.SNO=student.SNO);
SELECT DISTINCT SNO FROM choose WHERE CourseID='C1'
UNION
SELECT DISTINCT SNO FROM choose WHERE CourseID='C3';
SELECT SNO FROM choose WHERE CourseID='C1'
UNION
SELECT SNO FROM choose WHERE CourseID='C3';
SELECT student.SNO,Name,CourseName,Score FROM student,choose,course WHERE student.SNO=choose.SNO AND course.CourseID=choose.CourseID;
SELECT MAX(Score) FROM choose WHERE CourseID='C1';
SELECT MIN(Score) FROM choose WHERE CourseID='C1';
SELECT SUM(Score) FROM choose WHERE CourseID='C1';
SELECT AVG(Score) FROM choose WHERE CourseID='C1';
SELECT COUNT(*) FROM student;
二、遇到的问题及解决
实验没有什么问题只是组合查询更加的复杂,使用的关键词的类型更多,有时会因为格式的错误和关键词的使用错误而得到不符合要求的答案,但是经过理解之后就没有问题了。
三、心得体会
这次试验也是数据库的查询但是却比以前的查询更加的全面和更具有实用性,更能有效的描述表与表之间的联系,查询出的数据也更符合现实生活中人们的要求。
实验 七 MYSQL应用环境开发的建立
学号 姓名
一实验内容
通过在Windows平台下,搭建Apache Httpd Web服务器,PHP脚本支持,访问MySQL数据库等,学习了解MySQL应用开发环境的建立过程。
本次实验通过安装Apache HTTD Server 2.2、PHP 5.3.28,配置httpd.conf和PHP.ini文件,完成MySQL的PHP应用开发环境的建立。
二、遇到的问题及解决
1.在安装Apache httpd 的时候我错误的选择端口为80,于是安装完成后不能通过实验书上写的http://localhost:8080访问到服务器的网页,后来检查才发现,但是我没有重新安装,输入网址http://localhost:80也访问到了服务器上的网
页.2.
解压php-5.3.28压缩文件到D盘时未能将所有文件及文件夹放置到一个文件夹内,于是后面修改php配置文件使之能支持mysql时发生了找不到mysql相关的配置文件错误,于是我重新解压了一次压缩文件便恢复了正常。
三、心得体会
这次试验对我们来说是不小的收获,我们以后可以通过这个搭建服务器发布自己的网页,同时也对Tomcat有了一些了解。我希望有一天能搭建自己的网站,放上自己写的网页展示给别人看。
实验 八 MySQL的存储过程
学号 姓名
一实验内容
1.重点:
(1)存储过程的创建、修改和删除。
(2)存储过程的调用。
2.难点:
(1)MySQL的分隔符定义
(2)存储过程的创建
(3)带参数的存储过程的调用
create database db5128;
use db5128;
create table cqupt(s1 integer);
insert into cqupt values(1);
CREATE PROCEDURE third_p()
SELECT * FROM cqupt;
CREATE PROCEDURE simpleproc2(IN i INT,OUT X INT)
SELECT 10*i INTO X ;
drop procedure third_p;
二遇到的问题及解决
1.在创建存储过程的时候,在存储过程名的括号后面多加了一个‘;’结果导致创建存储过程失败,调试了很久才通过。
2.在创建存在输出参数的存储过程的时候没有使用into 关键字,导致得到的结果没有赋值给输出变量,没能得到正确的结果,在调用该存储过程的时候输出参数名没加‘@’符号,导致出现未知的错误。之后按照实验指导书上面的语句书写得到了答案。
三心得体会
感觉sql里面的存储过程有一点像c语言里面的函数,将很多的语句进行封装,这样可以提高代码的重用率,使用大量重复的sql语句时节省更多的时间,并且在程序的视图端不容易被别人看到开发者对数据库真正的操作,提高了数据库的安全性。
实验 九 MySQL的触发器
学号 姓名
一实验内容
了解MySQL触发器的创建、修改、删除方法和步骤,掌握在Navicat for mysql中对触发器进行创建、修改和删除,掌握触发器触发的测试方法。
create trigger aduit_student_update
before update on student
for each row
BEGIN
insert into student_log() values (current_user,current_timestamp,'更新前操作');
end;
二.遇到的问题及解决
1.创建存储过程的时候忘记写for each row 引起了未知的错误;
2.创建了更新操作的触发器之后,我对表不断的插入数据,但是发现action那一栏一直是NULL,后来才发现只有更新操作才能触发器才能被出发,以后创建触发器的时候要根据自己需要的类型(before,after,update等)进行操作。
三.心得体会
触发器让我们可以方便的追踪用户对表的操作,生成数据库使用日志等,方便对表的管理,感觉就像java里面的事件处理机制,可以对用户产生的动作进行捕捉,只不过这里是对数据库表的操作而已。
实验 十 SQL语言数据控制语言DCL
学号 姓名
一、实验内容
1.重点:
(1)权限的授予
(2)权限的回收
2.难点
权限授予的with grant option的使用
当用户对某操作无权限的,如何对其进行授权。
grant all on test.* to jason@'%' identified by 'abc123';
revoke all on test.* from jason;
revoke select on mysql.dcltest from jason;
二遇到的问题及解决
授权语句对用户进行授权的时候要指明授权的类型和用户的名称,验证的类型等,否则在访问数据库的时候会出现无法连接的错误。在做对数据的修改进行授权的时候,始终无法访问数据库,后来发现必须先对数据库的访问进行授权,这样才能先访问,后修改。
三心得体会
以前没有学习授权的时候,如果编程要用到数据库,我们会直接用管理员的账户和密码数据库的访问,但是这样带来的问题就是安全性不高,如果恶意者对程序进行修改或者通过程序窃取到了数据库的密码,这样会使数据库的数据安全受到威胁,但是现在有了授权机制之后,可以对只需要访问数据库数据的用户只授予访问权限,这样就不会让别人有权利修改数据,数据的安全性有了较好的保障,而且可以收回权限,让数据库的共享性变得更加良好。
实验 十一 MySQL的事务与锁
学号 姓名
一实验内容
1.重点:
(1)事务的设置、提交和回退
(2)表的锁定和表的解除
2.难点
事务的开始与结束
SAVEPOINT的用法
表锁定与锁定解除
start transaction;
update record set jine=jine-10000 where name='李四';
select * from record;
update record set jine=jine+10000 where name='王五';
select * from record;
commit;
select * from record;
lock table sellrecord read;
start tansaction;
update record set jine=jine-5000 where name='李四';
update record set jine=jine-15000 where name='王五';
update record set jine=jine+20000 where name='张六';
select * from record;
commit;
二遇到的问题及解决
事务处理的时候,设置事务后,进行rollback,结果并没有回转,试过几次之后发现是没有设置自动提交为否,每次提交了事务之后就没办法回转了。设置了autocommit=0后问题就解决了。
三心得体会
数据库的事务处理和加锁是非常重要的,设计用到数据库程序的时候经常会进行一系列的数据库操作,像银行转账这样的操作一旦失败就必须把之前的操作都回滚才行,不然会在金额方面发生错误。加锁也是非常重要的,适当的对数据库加锁可以在保证事务的并发性下得到正确的数据。
实验 十二 MySQL的常用函数
学号 姓名
一实验内容
MySQL的常用函数包括常用的字符串、日期和时间函数等各类函数
本次实验了解MySQL常用字符串、日期和时间函数等的使用,掌握MySQL Command LineClient中如何进行相关操作。
重点:
(1)常用的字符串函数
(2)常用的日期和时间函数
select length('Hello world');
select concat('Hello ','Mysql');
select insert('Hello',1,2,'World');
select left('Hello',2);
select upper('Hello world');
select current_date();
select week(current_date());
二遇到的问题及解决
在使用dayofweek()函数的时候,我们做实验时是星期二,但是每次我是用select dayofweek(current_data())的时候却是显示3,后来查了一下才知道这是把星期天算作每个星期的第一天。
三心得体会
Mysql中提供的这些函数使我们能够更加方便的处理得到或者要存储的数据,这些函数的命名规则和一些高级编程语言里面的很相似,所以也非常的好记忆。这学期的实验也是最后一次了,经过了这一学期的上机实验,我的数据库语言使用有了很大的进步,现在可以编程写一些小的数据库程序,学以致用的感觉很好。
下一篇:中国消费者对家居服的认识