实验一 创建数据库

实验一 创建数据库

一.实验目的

1.学会数据表的创建;

2.加深对表间关系的理解;

3.理解数据库中数据的简单查询方法和应用。

二. 实验内容

这里描述实验过程、实验结果、结果分析(是否正确、出错原因等),通过截图、文字等详细描述。

给定一个实际问题,实际应用问题的模式设计中至少要包括3个基本表。应用问题是供应商给工程供应零件(课本P70)。

  1. 创建一个数据库,数据库名称命名为自己的喜欢的名称。

 

  1. 实验过程:

使用SQL语句:CREATE DATABASE `xxx`

使用可视化工具:新建数据库—输入数据库名字、字符集和排序规则

  1. 实验结果:

SQL语句方式:

可视化工具方式:

 

        3.结果分析:

MySQL创建纯数字数据库的时候要用反引号``(英文输入状态下双击两下ESC下方的键)包裹数字才可以创建成功,不然的话单纯用数字创建数据库会出现“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '61' at line 1”错误,必须带上反引号,可以正确新建数据库。

 

2.在已建立的数据库中使用SQL语句和可视化环境分别建立应用中的四个表,包括属性名、数据类型,正确创建表的主键、外键。

1)    实验过程:
输入SQL语句:
 

-- S表
CREATE TABLE S (
	SNO CHAR (2) PRIMARY KEY,
	SNAME CHAR (3),
	STATUS CHAR (2),
	CITY CHAR (2)
);
-- P表
CREATE TABLE P (
	PNO CHAR (2) PRIMARY KEY,
	PNAME CHAR (3),
	COLOR CHAR (1),
	WEIGHT SMALLINT
);
 -- J表
CREATE TABLE J (
	JNO CHAR (7)PRIMARY KEY,
	JNAME CHAR (8),
	CITY CHAR (2)
);
-- SPJ表
CREATE TABLE SPJ (
	SNO CHAR (2),
	PNO CHAR (2),
	JNO CHAR (7),
	QTY INT,
	PRIMARY KEY (SNO, PNO, JNO),
	FOREIGN KEY (SNO) REFERENCES s (SNO),
	FOREIGN KEY (PNO) REFERENCES p (PNO),
	FOREIGN KEY (JNO) REFERENCES j (JNO)
);

可视化环境:新建表--输入相应的字段名、数据类型以及完整性限制等保存即可
2)    实验结果:
 

SQL语句方式:

 可视化环境:

 

 

 

 

 3)    结果分析:

SQL语句和可视化环境都可以正确创建这四个表,正确创建表的主键、外键。
当给一个表设置外键的时候只能设置一个,不可以设置多个,如果想设置多个的话就得用表级约束条件将多个字段放到括号内,如果是主键只涉及到一个字段的话可以用表级约束条件和列级约束条件。设置外键约束的时候要注意引用的字段和被引用的字段。
3.    往零件表J中增加适当规模的记录(至少1000条,上万条最好,项目名可以用“项目+序号”简单命名,每个项目名唯一);然后基于项目名属性列建唯一索引,并编写查询语句验证所建索引是否有效。(提示:查询语句中的条件要用到项目名属性;在建索引前先执行该语句,建索引后再执行,然后比较两次执行的时间)。

1)    实验过程:
用存储过程插入10万条数据的SQL语句:
 

---5个城市的循环输入
DROP PROCEDURE IF EXISTS proc_insert_J;
DELIMITER $$
CREATE PROCEDURE proc_insert_J (IN args INT)
BEGIN
	DECLARE i INT DEFAULT 0 ; DECLARE
			flag INT DEFAULT 0 ; DECLARE
				city CHAR (2) ; START TRANSACTION ;
			REPEAT
			SET i = i + 1 ; CASE flag
			WHEN 0 THEN
			SET city = '北京' ;
			WHEN 1 THEN
			SET city = '长春' ;
			WHEN 2 THEN
			SET city = '天津' ;
			WHEN 3 THEN
			SET city = '唐山' ;
			ELSE
			SET city = '南京' ;
			END CASE ;
			SET flag = (flag + 1) % 5 ; INSERT INTO J ()
			VALUES
				(
					concat('J', i),
					CONCAT('项目', i),
					city
				) ; UNTIL i >= args
			END
			REPEAT
				; COMMIT ;
			END$$

DELIMITER ;
    CALL proc_insert_J (100000) ;
用下面的语句测试执行过程:
-- 查询J表所有数据
SELECT * FROM J;
-- 查询项目96666 
SELECT JNAME FROM J WHERE JNAME='项目96666';
-- 添加索引再进行测试查询时间
ALTER TABLE J ADD UNIQUE INDEX  MYJNAME (JNAME);
-- 查询J表所有数据
SELECT * FROM J;
-- 查询项目96666 
SELECT JNAME FROM J WHERE JNAME='项目96666';

2)    实验结果:
插入100000条数据:

 

没有添加索引的:

 

 

添加索引的:

 

 

3)    结果分析:
 存储过程插入10万条数据的时候提示数据过长,后来才发现原来字段的长度小于数据的长度,所以对J表的字段长度进行了扩充,目前J表的长度足够插入10万条数据。循环插入多个城市如何实现,由于不懂语法就用Java中if分支结构思想实现了MySQL存储过程中的分支,后来老师提示用case when语句使得代码更加美观和易操作,我还在考虑有没有类似数据这样的实现方式等。
 索引执行速度的分析,可以发现查询JNAME='项目96666'添加索引前后的执行速度有明显的差别,对于查询所有的数据可以发现添加索引和未添加索执行的速度没有很大的差别,查询资料可知,查询所有的数据的时候索引是失效的通过‘’EXPLAIN SELECT * FROM J;‘’语句可以发现查询出来的type字段的值为ALL说明查询走的是全局查询而不是走索引查询,对于‘’EXPLAIN SELECT JNAME FROM J WHERE JNAME='项目96666';‘’语句可以发现type=const说明查询走的是索引,其实还有好多查询索引出现失效的情况比如说模糊查询等。

4.    将数据库转储到D盘根目录下,命名为自己的学号。点击右键选择“转储SQL文件”,选择“结构和数据”。
1)    实验过程:
在Navicat环境下选中某个表,右键“转储SQL文件”--->点击“结构和数据”--->选中位置,点击“保存”即可。
2)    实验结果:
 

3)    结果分析:
注意选择导出结构和数据如果选择了仅导出结构的话是没有数据的,导出之后用记事本打开可以看见对应的SQL语句以及相应的数据。
5.    完成数据库的备份和还原。首先为建好的数据库新建备份,然后在将备份拷走,和同学合作在另一台电脑上还原备份,还原后查看原有数据库中的信息是否存在。
 

1)    实验过程:
备份的过程:
打开“xxxx”数据库--->“右键”选中备份--->点击“新建备份”--->点击备份,可以看见备份下多了一个备份文件并重命名为“实验一数据库备份”,此时可以复制到别的电脑或者别的账户下进行备份还原。
备份还原的过程:
在别的账户上,先创建一个数据库“实验一”没有任何数据,此时拷贝过来进行备份的还原,还原后可以查看到相同的数据。
2)    实验结果:
 

 

还原备份:

还原过程:

还原后可以看到这几个表:

打开表可以正常看到数据:

 3)    结果分析:
可以正常完成备份和还原

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

简单点了

谢谢大佬

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

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

打赏作者

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

抵扣说明:

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

余额充值