发表于: 2016-11-23 21:04:56
4 2117
今天完成的事情:
任务一有更新,再将任务一更新的部分做完,进度如下
1)配置mysql(之前用的oracle),下载navicat
2)参考(http://www.cnblogs.com/xdp-gacl/p/3617243.html),整理业务模型,感觉需要三个实体对象,推荐人(属公司内部人员表),学员(报名表),修真类型(职业表),推荐人和学员、修真类型和学员都是多对一的关系(请帮忙看下理解对不对)
3)完成建表,根据任务要求进行简单的增删改查,建立索引,插入10条数据比较查询速度的区别(数据量太小,差别不太大)
表结构如下
4)navicat进行sql格式的备份与恢复
右键表备份成sql格式,删除数据,右键表所在数据库,运行sql文件
5)在电脑上安装虚拟机启动abuntu,在abuntu中部署tomcat及jdk、jre环境变量,无数次修改后终于启动tomcat成功
安装crt,在linux系统下配置ssh,成功进行远程连接
6)查看深度思考中Mysql相关的一些问题(求指导)
①为什么DB的设计中要使用Long来替换掉Date类型
好像是时区因素?存为long值一劳永逸,不怕时区错乱
②自增ID有什么坏处?什么样的场景下不使用自增ID?
如果删除了某些数据,id就不具有连续性了,对于某些需求属于弊端
java代码中设计model的时候,由于id是自增的,新建一个对象,调用对象的时候,对象属性值是不完整的,会出一些未知的问题
查阅资料,很多人都推荐GUID
③什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
暂时不知道多大的数据量下索引会有影响,,,写测试代码的时候再试一下
一般来说,在某个字段经常作为查询条件的时候建立该字段的索引比较好
④唯一索引和普通索引的区别是什么,什么时候需要建唯一索引?
区别:唯一索引下的字段值不能重复,但可以为空;普通索引不存在这种限制
在某个字段有这样的需求,可以为空但必须唯一,这时候适合建唯一索引
⑤如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
个人认为不需要吧,可以在insert语句中加入ignore关键字
INSERT IGNORE INTO table VALUES(,,,);
尝试sql语句加入一条重复数据(重复字段已经设置了唯一索引),会报错如下
[Err] 1062 - Duplicate entry '李博宇' for key 'index_name'
⑥CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
个人理解,create_at在insert语句执行时赋值,update_at在update语句执行时赋值。
是否应该开放给外部调用的接口。。。似乎跟接口开发规范有关。。。搜了很多资料也没弄明白接口开发
⑦修真类型应该是直接存储Varchar,还是应该存储int?
varchar吧,里面不是单纯整数啊
⑧varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
为了防止非法数据的进入,varchar不宜过长
个人是根据实际数据的长度,再增加两到三倍的长度,凑个整数来定。。不知同门们是怎么定的。。?网上没有搜到什么规则。。
变长字段定义的长度虽然不会影响服务器数据空间大小,但是对于客户端的内存有影响,客户端在用SQL从数据库读取数据时,首先会取到字段定义的长度,然后分配足够的内存,也就是说如果你定义的字段长度是1K,实际长度是10字节,要取1K记录,那客户端会分配1MB的内存, 但只保存了10K有效数据。这将会比较严重的浪费客户端内存。特别是一些高并发或者是取大量数据的场景,容易产生内存溢出
区别:text和longtext比varchar能够接收的字符串更多,与varchar不同的是text和longtext不可以有默认值,一般能用varchar的就不用text
明天计划的事情:
按照禅道中的计划走。。
遇到的问题:
linux的基本命令不熟悉,很不熟悉
mysql使用dos客户端查询时,中文显示乱码,因为mysql是使用utf8来显示数据的,但是操作系统是中文操作系统,默认字符集是gb2312,解决办法set character_set_results=gb2312
收获:
学习了数据库索引的基本概念
学习了数据模型
评论