发表于: 2017-02-28 23:48:53

1 1958


今天完成的事情


1.整理出业务模型

  • 一张students表用于记录学生的详细信息

students:


2.下载并安装Mysql 5.5, 全部使用默认配置.


3.下载Navicat, 连接到本地的mysql数据库, 并且创建students表如上.


4.插入这条数据,并能够根据姓名查出来这条记录

INSERT INTO

students

VALUES

(1, "王欢", 544168502, "JAVA工程师", "2017年3月1日", "中北大学", "Java-721", "http://www.jnshu.com/daily/15124?uid=6030", "胖,胖,胖,不能免俗", "李莎莎", NOW(), NOW());


SELECT * FROM students WHERE id = 1;


5.分别用Navcat和Sql语句去将本条数据记录的报名宣言改成老大最帅

UPDATE students SET wish = "老大最帅" WHERE id = 1;


6.给姓名建索引,思考一下还应该给哪些数据建索引

  • 我认为开始时间(start_time)以及课程类型(type)都应该建立索引, 这两者被当做条件进行查询的频率很高, 所以建立索引提高查询效率.


7.插入10条数据,查看有索引和无索引的情况下,Sql语句执行的效率

  • 有索引用时: 0.13s

  • 无索引用时: 0.09s

  • 我认为这是由于在插入时建立索引, 所以用时比较长.


8.查看深度思考中Mysql相关的一些问题, 我将回答放在遇到的问题中了.


9.下载Java 8, Maven 3, Eclipse 并配置环境变量.

  • JAVA_HOME, CLASS_PATH

  • M2_HOME, MAVEN_HOME

  • PATH

  • 使用 mvn -version, java -version, javac -version来检测安装配置是否成功


10.更改.m2 目录

  • 找到maven主目录下的conf/settings.xml

  • 在<settings>下添加

<localRepository>自定义的.m2目录</localRepository>


11.创建一个新的maven项目

  • cmd中换路径到想要创建project的目录

  • mvn archetype:generate -DgroupId={自己的项目名} -DartifactId={自己的项目名} -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

  • 换到创建好的项目目录下

  • 输入 mvn eclipse:eclipse, 创建eclipse的project

  • 导入eclipse


12.更改Junit版本

  • 打开project下的pom.xml

  • 更改Junit的version到4.12



明天计划的事情


1.通过JDBC进行Java与数据库的链接.

2.编写DAO.

3.复习Junit的单元测试写法.


遇到的问题


1.任务步骤的第五条, 时间和id都用long.

  • mysql中并没有纯粹的long类型. 而且我感觉long类型一般用于表示数字吧,为什么会用于日期, 难道这里的日期用的是JDE表示? 或者是用java的millisecond方法?

  • 不知道怎么处理. 我认为应该用text来表示时间,而id因为自增用int, 但是平时我的id都不是用的纯数字,而是每张表用的自己的前缀加数字,这样不用sql自己的自增,而是使用java实现自增.


2.JDK与JRE的区别.

  • JDK下面有一个完整的JRE目录. 所以自认为JRE是JDK的一个子集.

  • JRE仅仅用于运行JVM, 跑一跑java程序.

  • JDK适用于程序员,进行java程序的编写.


3.为什么DB的设计中要使用Long来替换掉Date类型?

  • Date类型并没有保存时区的信息

  • 而使用Long(在Java中用millisecond方法生成)时间可以很好的进行数间转换


4.自增ID有什么坏处?什么样的场景下不使用自增ID?

  • 举个栗子, 公司的用户注册表, 如果id用自增的, 那么只要新注册一个用户,那么就能知道这个公司的用户数量和规模, 这个被竞争对手知道了很危险呀.


5.什么是DB的索引,什么样的情况下该对字段建索引?

  • 索引就像是目录一样, 为了加快查找速度. 比如查字典, 我们根据拼音来查一个道理.

  • 对于经常出现在关键字(where, group by 等)后面的列应该建立索引.


6.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引?

  • 唯一索引不允许重复值出现, 而普通索引则可以.

  • 一般为了不允许重复值出现而建立唯一索引


7.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?

  • 不需要, 因为QQ是唯一索引,如果重复, 插入语句会停止执行.


8.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?

  • createAt应该在初始插入时自动被赋值, 然后不再改变.

  • updateAt应该在每次进行数据库操作时赋值,包括创建时.

  • 两者都只能开放查询, 而赋值由程序自动完成.


9.修真类型应该是直接存储Varchar,还是应该存储int?

  • 为什么用int? 难道还要再建立一张类型表, 这样更麻烦吧


10.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?

  • 根据存储的内容长度决定, 是动态的.

  • 一般会再加上1-2个字节用来存储长度.

  • Text 存储 2**16 - 1字节

  • Longtext 存储 2**32 - 1字节


11.怎么进行分页数据的查询,如何判断是否有下一页?

  • Select xxx  from XXX_Table where xxx order by ID limit 20 offset start_Number

  • Select xxx  from XXX_Table where xxx and ID >= min_Id and ID < maxId

  • Select xxx  from XXX_Table where xxx and ID >= min_Id limit 20

  • 将limit的值变为每页显示数字再加一, 比如想每页显示20条, 那么就limit21

  • 这样看每次数据量是否达到21, 如果不够, 那么没有下一页了.


12.为什么不可以用Select * from table?

  • 这样太慢


收获


1. 对maven有了一个初步了解, 原来一直觉得挺神秘.

2. 了解到了db的索引, 但是索引的具体作用还没有一个直观的体会.





返回列表 返回列表
评论

    分享到