发表于: 2018-03-15 22:59:15
1 685
今日完成:
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的区别:
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.数据库大数据/百万数据/千万数据下的优化/索引的直观体现。
待续
评论