发表于: 2018-04-03 22:16:48
2 799
今天完成的事情:
1. 整理出业务模型
上述信息除9外属于个人基本信息,可以组建为一张基本表,以ID作为主键,可以定为register表。其中3类型可以另开一张表type作为外键,9的话也可以考虑一个一对多,从师兄表elder_brother中找一个外键。
2.下载并安装配置mysql:之前已完成
3.下载navicat:
由于之前使用的是SQLyog,本次下载navicat后稍有点不顺手,具体问题参见后文今日遇到的问题。
4-5.创建业务表设计mysql数据库
报名表
其中ID选择自动递增
type表
elder_brother表
在这里我考虑到数据条数较少,将brother的id类型直接改成名字表示,如果数据量较大的话我觉得可以改成bigint形式,即对应师兄的线上ID号,这样整个表就利于管理。
在type表中插入相应数据
Elder_brother表中为测试暂时插入如下数据
一对多中多的一方添加外键
6.从报名贴中找一条最近报名的师弟,用Mysql插入这条数据,并能够根据姓名查出来这条记录
利用navicat的插入数据,由于其中日期格式采取long,所以这里采用了如下格式。
但这里我考虑到一点这样的日期格式肯定不是正确的,首先它没有一个实际意义,这样写我为什么不转换为日期格式或者字符串呢?而且根本用不到Long类型。我找了一点资料觉得日期这块应该写成时间戳的形式。
mysql中关于时间记录一块的内容,我查找了部分资料:
一般有三种存储方式
1、时间戳(bigint)
优点:存储性能好,精度要求高
缺点:可视化不佳,不利于数据查找
2、datetime
优点:可视化好。
缺点:精度长度稍显不足
3、字符串
字符串比起事件类型,数字类型占用空间更大。
总结:datetime更节约空间,有更好的查询性能,如果datetime的长度或精度不满足需求,建议存储bigint类型的时间戳,没有必要将时间类型存为char。
参考知乎:https://www.zhihu.com/question/27910664
时间和和时间戳的互换函数:
select FROM_UNIXTIME(1156219870);
Select UNIX_TIMESTAMP('2006-11-04 12:23:00');
之后我使用mysql语句插入报名数据,截图如下:
这是两者之间的对比:
查询该条数据:
select * from register where ID=3;
7.分别用Navciat和Sql语句去将本条数据记录的报名宣言改成老大最帅
表上修改如图所示:简简单单的几个输入,帅气的老大便跃然纸上(不对不对是屏幕上,哈哈)
Sql语句修改:
update register set hope='老大最帅' where id=1;
果然老大还是最帅的。
8.将表导出成Sql文件,并使用navciat和Sql分别尝试删除此条数据,并用之前备份的Sql恢复。
①navciat导出:
将sql存储到相应位置。
不妨试着用sublime来看看里面是什么:
首先如果数据库中有register表就删除
然后创建了一张新表,添加了字段类型并且设置好了主键和外键。
最后插入了我之前的两条数据。
②删除数据:
Navicat删除
Mysql语句删除:
delete from register where ID=1;
3、导入sql文件
结果正确。
明天计划的事:
完成mysql剩余内容,并且安装好maven,新建maven项目测试一下。
遇到的问题:
由于之前一直使用SQLyog,下载了navicat后发现找不到视图管理器,一下子配主外键都弄不清除了,系统一致报外键约束的错,这一块也是因为我对sql主外键约束不是理解很透测导致的,在通过两个软件共同使用中,我终于意识到一对多关系,外键约束都是多方在维护。
收获:
1、学会navicat的初步使用
2、理解了表主外键约束的关系
3、认真分析了日期类型数据的存储方式,使用时间戳将日期数据存储为Long形式
评论