数据库原理——实验一:数据库和表

目录

一、实验目的与要求

二、实验内容

1、创建数据库

2、插入数据

3、完成本次实验数据库的备份操作

三、实验小结

1.实验中遇到的问题及解决过程

2. 实验中产生的错误及原因分析

3. 实验体会和收获


一、实验目的与要求

1、掌握MySQL中如何创建数据库和表的方法(要求在交互式命令提示符下完成,截图)

2、熟练掌握MySQL的数据类型、主键实体完整性的设置

3、参照完整性的定义及应用(Navicat可视化操作,熟悉代码)

4、插入数据(Navicat完成)

5、数据库的备份操作

二、实验内容

1、创建数据库

创建名为fruitshop的数据库,并创建数据表fruits、customers(客户)、orderitems(订单详单)、suppliers(供货商)和orders(订单总表),表结构和约束条件如下:

注:

1.各表中的“字段说明”属性仅用于辅助说明该属性的含义,不用定义在表的结构中

2.表中没有明确指定外键,试分析找出各表中的外键并定义其外键约束、级联删除、级联更新操作;

表 1   fruits表结构

字段名

字段说明

数据类型

主键

外键

非空

唯一

自增

f_id

水果编号

char(10)

Y

N

Y

Y

N

s_id

供应商编号

INT

N

Y

Y

N

N

f_name

水果名

char(255)

N

N

Y

N

N

f_price

价格

decimal(8,2)

N

N

Y

N

N

2   customers表结构

字段名

字段说明

数据类型

主键

外键

非空

唯一

自增

c_id

客户编号

int

Y

N

Y

Y

Y

c_name

客户名

char(50)

N

N

Y

N

N

c_address

客户地址

char(50)

N

N

N

N

N

c_city

城市

char(50)

N

N

N

N

N

c_zip

邮编

char(10)

N

N

N

N

N

c_contact

联系人

char(50)

N

N

N

N

N

c_email

电子邮箱

char(255)

N

N

N

N

N

3   orderitems表结构

字段名

字段说明

数据类型

主键

外键

非空

唯一

自增

o_num

订单号

int

Y

Y

Y

N

N

o_item

订单项

int

Y

N

Y

N

N

f_id

水果编号

char(10)

N

Y

Y

N

N

quantity

数量

int

N

N

Y

N

N

item_price

单价

decimal(8,2)

N

N

Y

N

N

                注:orderitems表中o_numo_item的组合构成主键。

表 4   suppliers表结构

字段名

字段说明

数据类型

主键

外键

非空

唯一

自增

s_id

供应商编号

int

Y

N

Y

Y

Y

s_name

供应商名

char(50)

N

N

Y

N

N

s_city

城市

char(50)

N

N

N

N

N

s_zip

邮编

char(10)

N

N

N

N

N

s_call

电话

char(50)

N

N

Y

N

N

5   orders表结构

字段名

字段说明

数据类型

主键

外键

非空

唯一

自增

o_num

订单号

int

Y

N

Y

Y

Y

o_date

订购日期

datetime

N

N

Y

N

N

c_id

客户编号

int

N

Y

Y

N

N

源码:

创建数据库:

创建表:

①创建fruits表:

②创建customers表:

③创建orderitems表:

④创建suppliers表:

⑤创建orders表:

运行测试结果截图:

①命令行数据库创建成功

②创建suppliers表成功

③创建customers表成功

④创建fruit表成功

⑤创建orders表成功

⑥创建orderitems表成功

⑦各表创建成功后,显示表格成功

2、插入数据

向数据表fruits、customers、orderitems和suppliers、orders中插入给定的如下数据,要求如下:向数据表customers和suppliers中分别插入一条记录,新记录customers的C_ID属性值统一为10000,在suppliers的S_ID属性值统一为100,S_NAME数据为JMU,其余属性值为本人的真实信息;向数据表fruits、orderitems、orders表中插入分别插入五条与本人相关(即在对应表中的C_ID属性为10000,S_ID属性为100的新记录

源码:

运行测试结果截图:

①Navicat插入新记录成功

 

②插入新记录后各表显示

图1-1 customers表

图1-2  fruit表

图1-3 orders表

图 1-4 orderitems表

图1-5 suppliers表

3、完成本次实验数据库的备份操作

方法一:Mysql -uroot -p123456 数据库名 >目的地址及文件名.sql

方法一:Navicate Premium转储为.sql

比较上述两种方法的异同:

①方法一是用在命令行下进行,在目的文件地址输入正确的前提下可以快速导出sql文件,但是存在命令行警告提示,这样操作暴露密码是不安全的。

②方法二是在Navicat下进行的转储

首先,选择目标数据库;

再者,右键点击,选择转储SQL文件,再选择结构和数据;

然后,选择存储位置保存。

三、实验小结

1.实验中遇到的问题及解决过程

① 问题:不清楚decimal数据类型

解决:decimal(a,b)的参数说明:

a指定指定小数点左边和右边可以存储的十进制数字的最大个数,默认是10,最大精度65。b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0,最大值为30。DECIMAL数据类型用于要求非常高的精确度的计算中,这些类型允许指定数值的精确度和计数方法作为选择参数。精确度在这里是指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的个数。例如,语句DECIMAL (5,2)规定了存储的值将不会超过5位数字,开且小数点后面有2位数字。

② 问题:不清楚datetime数据类型

解决:datetime为日期类型,所能存储的时间范围为:'1000-01-01        00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。字节为8,格  式为YYYY-MM-DD HH:MM:SS,用于保存同时包含日期和时间两部分的值。

2. 实验中产生的错误及原因分析

① 错误:无法添加外键约束的

原因分析:fruit表有s_id的外码,fruit表是参照表,suppliers表是被参照表;创建fruit表的时候,未创建suppliers表,所以根据参照完整性的定义,产生错误,拒绝创建fruit表。

② 错误:SQL语法错误

 原因分析:第五行多了一个逗号,导致错误

③ 错误:Navicat插入数据报错,报错语句如下:

INSERT INTO `orderitems` VALUES (001, 2, 'F005', 12, 6.6)

> 1452 - Cannot add or update a child row: a foreign key constraint fails

 (`fruitshop`.`orderitems`, CONSTRAINT `orderitems_ibfk_1` FOREIGN KEY

(`o_num`) REFERENCES `orders` (`o_num`))

原因分析:向orderitems表插入新纪录时,外码错误;此时还未向fruit表中添加新纪录,fruit表为空,即主码无f_id,而先向orderitems表中的外码f_id,根据参照完整性的定义,产生错误。

3. 实验体会和收获

        本次实验旨在用命令行和Navicat对数据库进行创建和插入操作,熟悉了两种方式对数据库备份。实践操作中,因为有两次过程中遇到的错误,使我认识到了老师上课所讲到的参照完整性,对此有更加清楚深刻的了解;同时也学习到了mysql的数据类型比如decimal和datetime,上了八周理论课,确确实实在实验课上操作起来更加有刻板印象。

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamWendy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值