发表于: 2018-03-14 23:45:29
1 515
03-14
一:今日完成的
对深度思考的内容进行了查询。
下载安装了eclipse
自己对mysql基本语句(数据库,数据表操作,数据插入等做了一些巩固。
二:明天的计划
尝试完成Q15-Q18
三:今天的收获:
*Q11查看深度思考中Mysql相关的一些问题,将自己思考的结果写在日报中,并查阅之前师兄的日报,看看是否有合自己思路接近或者是完全不一致的地方。
深度思考5:为什么DB的设计中要使用Long来替换掉Date类型?
date类型的好处是,可以直观的察看到日期数据, 使用Long型的好处是,方便网络数据的传输。
深度思考6:自增ID有什么坏处?什么样的场景下不使用自增ID?
自增主键这种方式是使用数据库提供的自增数值型字段作为自增主键.
它的优点是:
1数据库自动编号,速度快,而且是增量增长,按顺序存放,对于检索非常有利;
2数字型,占用空间小,易排序,在程序中传递也方便;
3如果通过非系统增加记录时,可以不用指定该字段,不用担心主键重复问题。
缺点(其实它的缺点也就是来自其优点)如下:
1因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其它系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的)。特别是在新系统上线时,新旧系统并行存在,并且是异库异构的数据库的情况下,需要双向同步时,自增主键将是你的噩梦;
2在系统集成或割接时,如果新旧系统主键不同是数字型就会导致修改主键数据类型,这也会导致其它有外键关联的表的修改,后果同样很严重;
3若系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个字符标识(例如“o”,old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。
深度思考7:
1:什么是DB的索引. 2:多大的数据量下建索引会有性能的差别。
3什么样的情况下该对字段建索引?
(1)索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多。设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率。
(2) <1>如果是数据重复且分布平均的表字段,for example: 有一个字段A只有T和F两种值,且每个值的分布概率大约为 50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。也就是核心数据少的时候,建立索引,即便数据量大,也不一定能够能提高速度。
<2> 虽然一个表可以设置无限的索引。但是,表中的索引越多,维护索引所需要的开销也就越大。每当数据表中记录有增加、删除、更 新变化的时候,数据库系统都需要对所有索引进行更新。故数据库表中的索引绝对不是多多益善,对于经常有数据变动的表,要尽量少使用索引。
<3>对于多大的数据量能引起性能的差别,网上有说10W,也有说2W的。
我个人认为,要根据表中数据字段重复性,核心数据多少,数据表的修改频率等做出判断,很难一言蔽之。
(3) 对于索引建立的原则,思考如下:
<1>表的主键、外键必须有索引。
<2>索引应该建在选择性高的字段上;
<3>经常与其他表进行连接的表,在连接字段上应该建立索引;
<4>经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
<5>频繁进行数据操作的表,不要建立太多的索引;
<6>在一个字段上不同值较多可是建立索引。
深度思考8:唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。
唯一索引:索引列中的值必须是唯一的,但是允许为空值,
对于一些学号,职工号,等不会重复的数据建议使用唯一索引。
深度思考9:如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
根据我现有的表,我做了一个测试:
我把我的表的name做了一个唯一索引。
然后我重复插入一条数据:李四
显示我的这个数据重复了。
如果人为判断工作量大,就让MYSQL判断吧。否则自己去判断也行。
深度思考10:CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
create_at应该在记录插入的时候赋值,update_at应该在插入和更新的时候赋值。
这两个字段我认为应该对外开放查询接口,关闭更新接口。
深度思考11:修真类型应该是直接存储Varchar,还是应该存储int?
VARCHAR是可变长字符串,不用考虑太多,灵活。Int是整型。
修真类型,无非就是那么几个既定的东西,用int作为序号就好了。
不过也就是这么几个东西,所以也可以使用枚举 enum。
深度思考12:varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
在有明确需求,且不会变更的情况下,Varchar按照存储的最长长度来设置;
对输入的值不确定的情况下,确定大致范围,并多保留一定的空间;
varchar的长度还可以用来规范数据的合法性。
Text和LongText的区别:存储长度的区别,TEXT,0-65535字节,LONGTEXT,0-4294967295字节(4GB)
深度思考13:怎么进行分页数据的查询,如何判断是否有下一页?
分页查询的介绍,以下文章就写得挺好
http://blog.csdn.net/liujiahan629629/article/details/19698091
https://www.jianshu.com/p/1daccf24240c
判断下一页:使用select COUNT(*) from table获得数据表的总数,然后通过计算就可以得到是否有下一页了。
深度思考14:为什么不可以用Select * from table?
*查询的是这个表中的所有列,但是一般情况下我们只需要查询某一个或多个字段,而不需要所有字段都查询,这样会影响效率,所以在明确知道自己所需字段的情况下不推荐使用SELECT * FROM TABLE。 另外如果是要查询总条数,也不推荐使用SELECT count(*) FROM TABLE; 而推荐使用SELECT count(0) FROM TABLE。
Q12下载Java 7,并配置环境变量,百度搜索一下JDK和JRE的区别,并将结论用自己的话写在日报中。
Q13下载Maven3,并配置好环境变量。
已装。
Q14:.下载Eclipse或者是IDEA,配置好Maven。IDEA不用配置Maven,Eclipse也分自带或者外部,推荐使用外部Maven。
这里有一个问题:我打开 file-new- 没有找到创建JAVA的栏目,我是否装错了eclipse.
遇到的问题:
1:需要一些小的模块去实践一下。不然索引这一块,根本啃不下去。
2:eclipse的file-new没有找到JAVA这一个栏目,是我的JAVA装错了还是eclipse?
总结:
查找了很多的东西,其实都不怎么能吸收,需要在以后的日子反复去理解和重新认识。
Mysql的基本语句,看的时候都懂,写的时候容易错,证明自己还是不熟练,需要给自己安排一些小小的模块去训练一下。
评论