发表于: 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的索引, 但是索引的具体作用还没有一个直观的体会.
评论