发表于: 2018-03-15 22:59:15

1 686


今日完成:


1.数据库安装

*问题:出现error:2503

*原因:系统不能以管理员身份运行安装程序

*解决:右键菜单没有“以管理员身份”开始菜单:在菜单中选择”命令提示符(管理员)(A)“;在命令提示符窗口中输入: msiexec /package "安装文件的全路径";

安装完成。


2.设计db表

报名流程



报名学员资料(学生信息表 user):

id: BigInt notnull auto_increment primary key(id)  

create_at: BigInt

update_at: BigInt

name: varchar(50)

QQ: vatchar(50)

type: vatchar(255)

ruxue_time: vatchar(100)

shcool: vatchar(255)

jnshu_num: vatchar(255)

deypaper: vatchar(500)

pro:     vatchar(500)

scbrother: vatchar(50)

创建语句:

create table user( id bigint NOT NULL auto_increment, create_at bigint, update_at bigint,name varchar(50),qq varchar(50),type varchar(50), ruxue_time varchar(50),school  varchar(255),jnshu_num varchar(50),deypaper varchar(500),pro varchar(50),scbrother varchar(50),primary key(id))



SQL语句

CREATE DB

CREATE DATABASE database_name

 

CREATE TABLE

 

CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... )

CREATE TABLE Persons ( Id_P int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) )

 

SELECT TABLE

SELECT 列名称 FROM 表名称 WHERE 列名 = 查询值

SELECT LastName,FirstName FROM Persons

 

UPDATE TABLE

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

 

INSERT INTO

INSERT INTO 表名称 VALUES (值1, 值2,....)

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

 

DELECT 列名称

DELETE FROM 表名称 WHERE 列名称 = 值

 

DROP TABLE DB

DROP TABLE 表名称

DROP DATABASE 数据库名称

TRUNCATE TABLE 表名称 (清除表内容)


删除索引

DROP INDEX index_name ON table_name

ALTER TABLE table_name DROP INDEX index_name

 

ALERT TABLE

添加列:ALTER TABLE table_name ADD column_name datatype

删除列:ALTER TABLE table_name DROP COLUMN column_name


SQL 约束

   NOT NULL 非空约束

  UNIQUE 唯一约束

  PRIMARY KEY 主键约束

  FOREIGN KEY 外键约束

  CHECK 范围约束

  DEFAULT 默认值约束


3.安装 navicat / idea / 配置maven


 关于maven:

配置环境变量:

更新仓库地址(没更新完导致后面报错,时间比较久)



4.插入数据


SQL语句:insert into user (id,name,qq,type,ruxue_time,school,jnshu_num,deypaper,pro,scbrother) values (1,'陈昆鹏','1765049874','PM','2017年12.18','河南质量工程学院','PM-967','http://www.jnshu.com/daily/43680?dailyType=others&total=10&page=1&uid=12989&sort=0&orderBy=3','坚决不辜负毛爷爷八字真言。','PM-毛雨星');

查询:select * from user where name = "陈昆鹏"

修改宣言:update user set pro = '老大最帅' where name = '陈昆鹏'



5.深度思考:


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

- 因为date数据是以“yyyy-mm-dd”的固定格式储存,更为严谨,但相对long而言操作会繁琐,需要数据转换或者比较的时候没有long类型效率高(视情况,比如时间转换,数据运算)

- long类型可以满足date类型的存储需求,而且更容易操作。

- 感觉像是varchar类型也可以用来储存date类型,只是需要前台加以规范。但是数据来说没有date规范。


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

- 自增id最主要的就是删除的时候位置不会连续,如果有需求的话这点很麻烦,而且数据规律容易被发现。

- 数据量大的话可能会有字段数值不够的情况,数据迁移的时候大数据容易出问题,特别是id主键自增。

- 自增是主键下的,所以在有其它可以做主键的情况下就可以不使用id自增。


· 什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?

- DB中的索引应该类似于目录,它是建立在表数据(数据结构)之上。索引也是数据或者说数据类型,它能引导数据更快的查询。比如确定需要查询的数据范围,可以过滤掉哪些东西等。

  索引示意图:

 F:http://imysql.com/2017/08/08/quick-deep-into-mysql-index.shtml

 创建索引:

  普通索引 CREATE INDEX 索引名称 ON 表名称 (列名称)

  唯一索引 CREATE UNIQUE 索引名称 ON 表名称 (列名称)

  组合索引 CREATE INDEX 索引名称 ON 表名称 (列名称,列名称,列名称)

   and(创建/修改):

   PRIMARY KEY(主键索引)     ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 

   UNIQUE(唯一索引)                 ALTER TABLE `table_name` ADD UNIQUE (`column`)

   INDEX(普通索引)                    ALTER TABLE `table_name` ADD INDEX index_name (`column`)

   FULLTEXT(全文索引)                ALTER TABLE `table_name` ADD FULLTEXT ( `column` )

   组合索引                                ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3` ) 


- 如果有自增列做主键,相对完全没索引的情况,写入速度约提升 3.11%;如果有自增列做主键,并且二级索引,相对完全没索引的情况,写入速度约降低 27.37%;

- 应该根据电脑的负载和表数据结构来确定多大数据量下建索引,索引也会占据空间,应该10w以上的数据量使用索引会有明显的性能差别。但是索引也会造成效率下  降,如果CPU负载持续很高,但内存和IO   都还好的话,一般都是索引问题。

  F:http://imysql.com/2014/06/04/mysql-optimization-case-index-lead-to-high-cpu-load.shtml

- 主键一般都应该有索引。外链的数据列,查询条件经常用到的数据列,小字段的数据列都可以建立索引,频繁使用的数据也需要建立索引,但是不能过多。索引的建立应该有明显的利弊分析,过多的索引会   加大负载,降低性能。


· 唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。

- 唯一索引和普通索引的区别就是索引列的值必须唯一,不允许具有索引值相同的行,从而禁止重复的索引或键值,但允许有空值。还有主键索引:一种特殊的唯一索引,不允许有空值。

- 如果需要数据列的每个值都是唯一的时候可以创建唯一索引。唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。


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

- 如果对学院QQ号做了一个唯一索引在插入数据的时候如果已经存在这个QQ号则会报错,无法插入。


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

- create_at是创建的时候直接赋值,是数据创建的时间;update_at是修改的时候赋值,是数据修改的时间。不应该开放外部调用接口。


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

- ……猛一看修真类型有点懵,类型可以直接储存int,以数字代替不同类型,可以在表内注释。类似于表格里“男/女/其它”可以储存为“1/2/0”。


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

- 可以在创建的时候在数据类型后面限制:alter table tableName add columnName varchar(30)  。

- varchar是变长字节,所占空间为字符串实际长度加1,最大长度不能超过65335个字节。不同的编码长度在varchar储存中也有不同的占用空间。字符类型若为gbk,每个字符最多占2个字节,字符类型若为utf8,每个字符最多占3个字节。

- 和varchar不同的是Text不可以有默认值最大长度65535个字(2^16-1),LongText则是最大长度4294967295个字节 (2^32-1)。


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

- 可以通过limit查询所需要的分页数据:

查询第1条到第10条的数据的sql:select * from table [条件] limit 0,10;   ->对应我们的需求就是查询第一页的数据:select * from table [条件] limit (1-1)*10,10;

查询第10条到第20条的数据的sql:select * from table [条件] limit 10,20;  ->对应我们的需求就是查询第二页的数据:select * from table [条件] limit (2-1)*10,10;

查询第20条到第30条的数据的sql:select * from table [条件] limit 20,30;  ->对应我们的需求就是查询第三页的数据:select * from table [条件] limit (3-1)*10,10;

select * from table [条件] limit (start-1)*limit,limit; 其中start是页码,limit是每页显示的条数。


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

-  *是通配符,可以查询出所有的数据,没必要的数据都会执行查询,一般情况下是不用的,会浪费资源。而且数据量大会造成系统负担。


6.下载安装JAVA7并配置好


jre和jdk的区别:

JRE:Java Runtime Environment
JDK:Java Development Kit 

jre是java的运行环境、java运行类库,包含java虚拟机,java基础类库。是java程序运行时所必须的环境集合。

jdk是整个java的核心、java的开发工具包,具备开发功能,包含jre的同时还包含了编译java源码的编译器javac,虚拟机(JVM),java工具,基础类库,编译时所需要用到的各种命令。是程序员编写java程序所需要的核心。


7.下载配置IDEA,并且创建一个maven项目

创建maven项目总是报错,没有src目录:

· Generating project in Batch mode(出现批处理创建项目时就无反应)

· Maven execution terminated abnormally (exit code 1) 某些jar包/plugin无法加载或加载时间长

原因:网络不稳导致库更新失败。清除并重新安装maven和本地库。

再次执行命令:mvn help:system 可能之前网络原因没下载完整

加载好后再次执行 mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false?

直到出现 BUILD SUCCESS

success以后在idea里重新创建maven项目,这回idea创建成功


8.在src/main/java下随便创建一个java文件,clean,install.查看本地的.m2下是否成功看到有Jar包。

clean,install 报错

cd到maven项目根目录执行命令成功

执行后目录



9.学习idea

创建mvn项目:

·使用创建Maven

导入Springjar包/配置 applicationContext.xml


明日计划:

1.熟悉idea,使用IDEA完成jdbcTemplate,spring在idea里的配置;

2.使用Mybits;

3.spingmvc的模式了解;


问题与收获:

·解决了idea里右键没有新建java文件的菜单的问题;idea配置maven的问题(无法加载jar、plugin/不能自动生成src目录);知道了怎样在idea里创建项目;

·了解了在idea自动创建getAndset方法 toString方法等;

·maven的本地库配置,mvn的一些简单命令;

·熟悉sql的操作语句;开头创建需求表的业务关系;

·数据池的简单了解,mvc的模式简单了解;

明天继续深入。


任务一知识点(当前任务,自己需要掌握的):

1.DB数据库表设计;

2.SQL数据库使用,软件掌握,SQL语法;

3.Maven服务器相关与配置;

4.IDEA使用;

5.MVC和SpringMVC,了解-熟悉-深度;

5.JDBC,Spring里JdbcTemplate的实现方式,基础底层是如何实现;

6.Mybatis操作数据连接的流程/方式,与JdbcTemplate有何不同;

7.单元测试,Junit,Debug,try{}Catch;

8.服务器的部署;

9.数据库大数据/百万数据/千万数据下的优化/索引的直观体现。

待续





返回列表 返回列表
评论

    分享到