一、 请将你在作业2中设计的模式变成关系数据库中的表,并完成以下任务。
按如下格式要求在实验报告中描述所有涉及到的表的结构
在本次实验中,我设计了六个表格。
表1:

表2:

表3:

表4:

表5:

表6:

2.根据以上定义,写出各表的建表语句,并在你选的关系型数据库平台上建立各个表,请将建表语句统一写在扩展名为sql的文件中,构建一个建库脚本文本,命名要求为:
DBLabScript_学号.sql
答:已完成SQL文件,可以再文件夹中查看(这里的文件我会上传资源,审核通过之后我会把链接放到评论出,如果有需要也可以直接私信我)
3.掌握选用的关系型数据库管理系统的控制台插入数据的不同方法(执行数据批量插入脚本、窗口界面表格式手工录入、命令行交互式录入),实际填入测试数据,以验证你所设计的数据模型的合理性和完整性,注意验证三种完整性约束。
答:第一种:执行批量插入脚本:

输入后结果如下(其中第一个是之前建立数据库的时候输入的):

第二种:窗口界面表格式手工录入

在选定的表格中选择第一个——select Rows-limit 1000,出现该界面:

点击表格,就可以对数值进行修改,点击图中null部分的表格,就可以向数据库输入数据,在完成输入之后点击apply,这里我向表格中输入一组数据:

这里显示的是我们在窗口中进行的操作的SQL语言,点击apply开始执行

这里我们的操作符合要求,程序通过。

第三种:命令行交互式录入
通过命令行打开MYSQL,打开数据库,输入SQL语句向指定的表格输入数据,返回OK说明录入正常。
(果然还是这种黑白风格更对我的胃口啊)

通过select语句观察表格数据和输入效果:

4.请根据以上设计结果,重新完善与整理作业#2中所设计的模式,可重新修改并提交作业#2
5.请设计单表查询、多表连接查询语句,查询表中的内容,并截图证明
答:单表查询,查询所在行业是CS的用户的用户ID和用户名。

多表查询,查询超级会员的用户名,所在行业,注册时间。


上图为输入的SQL语句和输入后输出的结果。
6.请尝试练习在某些表上建立唯一索引和聚集索引的方法,并将建索引的语句写入建库脚本中。

上图为输入的建立user表中用户名索引的SQL语句。

上图为建立唯一索引的SQL语句,因为使用的是MySQL5.7,没有聚簇索引功能,这里简单说一下两者的区别,聚簇索引和唯一索引都是通过改变数据库的数据存储结构进而提高查询效率的方式,但是原理不同,唯一索引更多是使用B+树,通过指针指向其他数据节点,所以唯一索引不唯一,即可以对一个表的多个属性进行索引建立,而聚簇索引是把一个属性相同的数据放在一起,所以对于一个表来说聚簇索引是唯一个,只能建一个。
7.若某个表中涉及百万甚至千万级以上的数据,请提出仿真这些数据的方案,并在实验报告加以叙述。
答:在本次实验中,我先后使用了逐条输入和批量输入两种方案,并且对运行时间进行了对比,前者要接近一个小时,后者只需要18秒就可以完成百万级数据的输入。具体内容如下:
之前批量输入的时候使用的SQL语句是每条数据都写一条insert语句,但是这样的方法在数据规模较大的时候就不具备可行性,所以我使用存储过程的方法,将insert语句循环调用,再通过call调用存储过程,从而实现较大规模数据的输入。原理和编程语言中的函数类似。
这里我直接使用了workbench中专门的存储过程的窗口。

调用设计好的存储过程。

调用后的结果如下:

插入一千条数据需要的时间为3秒,插入十万条数据用时五分钟,插入百万级数据需要的时间约为半小时。以本次实验中主要使用的user表格为例,目前的数据仿真方案为通过字符串和用户ID的拼接来实现数据的仿真。
但是,这里我们对于时长是明显不满意的,百万级数据需要的时间太长了,而究其原因,就是insert语句每一行都要输入一次,这是对时间的极大浪费,而改变这一情况的方法也是非常简单,就是关闭事务自动提交模式,在MYSQL中是默认自动提交的,但是我们设置不提交的话,那么所有insert的数据都会存起来,在结束这一语句之后一起输入,可以极大地缓解和改善时间状况。

这里我们只填加了一句SQL语句,就可以完成之前的要求。再次调用这个存储过程。如下图所示(把上次输入的都先删掉)


这一次我们看到输入了一百万条数据只用了18秒的时间,这极大的减少了数据的时间耗费。
完成教材(数据库系统概论第五版)P.128上的习题4,5,9三道大题,第4题的建表语句中需包含主键和外键约束。
答:第四题建表SQL语言如下:
drop table SPJ;
drop table S;
drop table P;
drop table J;
USE zhihu_database;
CREATE TABLE S
(
SNO varchar(45),
SNAME varchar(45),
STATUS_ int,
CITY varchar(45),
PRIMARY KEY (`SNO`)
);
CREATE TABLE P
(
PNO varchar(45),
PNAME varchar(45),
COLOR varchar(45),
WEIGHT varchar(45),
PRIMARY KEY (`PNO`)
);
CREATE TABLE J
(
JNO varchar(45),
JNAME varchar(225),
CITY varchar(225),
PRIMARY KEY (`JNO`)
);
CREATE TABLE SPJ
(
SNO varchar(45) references S(SNO),
PNO varchar(45) references P(PNO),
JNO varchar(45) references J(JNO),
QTY INT
);
insert into S
value
('S1','精益',20,'天津'),
('S2','盛锡',10,'北京'),
('S3','东方红',30,'北京'),
('S4','丰泰盛',20,'天津'),
('S5','为民',30,'上海');
insert into P
value
('P1','螺母','红',12),
('P2','螺栓','绿',17),
('P3','螺丝刀','蓝',14),
('P4','螺丝刀','红',14),
('P5','凸轮','蓝',40),
('P6','齿轮','红',30);
insert into J
value
('J1','三建','北京'),
('J2','一汽','长春'),
('J3','弹簧厂','天津'),
('J4','造船厂','天津'),
('J5','机车厂','唐山'),
('J6','无线电厂','常州'),
('J7','半导体厂','南京');
insert into SPJ
value
('S1','P1','J1',200),
('S1','P1','J3',100),
('S1','P1','J4',700),
('S1','P2','J2',100),
('S2','P3','J1',400),
('S2','P3','J2',200),
('S2','P3','J4',500),
('S2','P3','J5',400),
('S2','P5','J1',400),
('S2','P5','J2',100),
('S3','P1','J1',200),
('S3','P3','J1',200),
('S4','P5','J1',100),
('S4','P6','J3',300),
('S4','P6','J4',200),
('S5','P2','J4',100),
('S5','P3','J1',200),
('S5','P6','J2',200),
('S5','P6','J4',500);
select * from S;
select * from P;
select * from J;
select * from SPJ;
(1): select DISTINCT SNO
from SPJ
WHERE JNO='J1';
(2): select distinct SNO
from SPJ
where PNO='P1' AND JNO='J1';
(3): select distinct SNO
from SPJ,P
where P.PNO=SPJ.PNO AND P.COLOR='红' AND SPJ.JNO='J1';
(4): SELECT DISTINCT JNO
FROM SPJ
WHERE JNO NOT IN(
SELECT JNO
FROM S,P,SPJ
WHERE S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO AND COLOR='红' AND CITY='天津');
(5):
SELECT DISTINCT JNO
FROM SPJ SPJ1
WHERE NOT EXISTS
(SELECT *
FROM SPJ SPJ2
WHERE SPJ2.SNO='S1' AND NOT EXISTS
(SELECT *
FROM SPJ SPJ3
WHERE SPJ3.JNO=SPJ1.JNO AND SPJ3.PNO=SPJ2.PNO))
第五题:
(1):
SELECT SNAME,CITY
FROM S
(2):
SELECT PNAME,COLOR,WEIGHT
FROM P
(3):
SELECT JNO
FROM SPJ
WHERE SNO='S1'
(4):
SELECT PNAME,QTY
FROM SPJ,P
WHERE(P.PNO=SPJ.PNO AND JNO='J2')
(5):
SELECT distinct PNO
FROM SPJ,S
WHERE(S.SNO=SPJ.SNO AND S.CITY='上海' )
(6):
SELECT JNAME
FROM J,SPJ,S
WHERE(J.JNO=SPJ.JNO AND S.SNO=SPJ.SNO AND S.CITY='上海')
(7):
SELECT distinct JNO
FROM J
WHERE JNO NOT IN
(SELECT JNO
FROM S,SPJ
WHERE S.SNO=SPJ.SNO AND CITY='天津')
(8):
SET SQL_SAFE_UPDATES = 0;
UPDATE P
SET COLOR='蓝'
WHERE COLOR='红'
(9):
UPDATE SPJ
SET SNO='S3'
WHERE(SNO='S5' AND PNO='P6' AND JNO='J4');
(10):
DELETE
FROM S
WHERE SNO='S2';
DELETE
FROM SPJ
WHERE SNO='S2';
(11):
`INSERT INTO SPJ VALUES('S2','P4','J6',200);`
第九题:
创建视图:
CREATE VIEW SHITU
AS SELECT SNO,PNO,QTY
FROM SPJ,J
WHERE J.JNAME='三建' AND J.JNO=SPJ.JNO;
(1):
SELECT PNO,QTY
FROM SHITU;
(2):
SELECT SNO,PNO,QTY
FROM SHITU
WHERE SNO='S1';
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手