发表于: 2017-05-15 21:01:55

3 1229


Task1第一天2017年5月15日

今日计划

mysql和navicat的安装,mysql数据类型基本操作学习

完成本任务1-11.


 

.参考修真院线下报名贴(学习资料-线下报名-北京报名)中报名的格式,整理出业务模型,确定需要几个对象,每个对象的属性是什么,对象和对象之间的关系是一对一,还是一对多

 

对象有以下几个:

序号

对象

数据类型

1

姓名

name

VARCHAR(20)

2

QQ

qq

VARCHAR(15)

3

修真类型

profession

VARCHAR(50)

4

预计入学时间

join_date

BIGINT

5

毕业院校

gschool

VARCHAR(50)

6

线上学号

online_class

VARCHAR(20)

7

日报链接

daily_url

TEXT

8

立愿

oath

TEXT

9

引荐师兄

introducer

VARCHAR(20)

10

审核师兄

auditor

VARCHAR(20)

11

辅导师兄

conselor

VARCHAR(20)

12

从何处了解到的修真院:

resource

TEXT

1、VARCHAR(M)是一种比CHAR更加灵活的数据类型,同样用于表示字符数据,但是VARCHAR可以保存可变长度的字符串。其中M代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。因此,对于那些难以估计确切长度的数据对象来说,使用VARCHAR数据类型更加明智。

2、Text——长文本型
最大字符数量:2的31次方 - 1个字符
宽度:定长16,代码中不写长度存放的是文本的指针

3、【百度到的经验】1)  VARCHAR L+1个字节,其中L<=M且0 <=M<= 65535
  TEXT    L+2个字节,其中L< 216
2) 1.尽量用varchar
  2.超过255字节的只能用varchar或者text
  3.能用varchar的地方不用text(自己理解,使用varchar可以节省空间,因此优先使用varchar)

疑问:1、预计入学时间是一个日期为什么数据类型为BIGINT

5条提示所有的时间都用long 在数据库里为BIGINT

      2、根据前面第三条百度到的经验,似乎都可以使用VARCHAR()作为数据类型。

.下载并安装及配置Mysql 5.5

http://www.jb51.net/softs/363920.html 脚本之家下载Mysql 5.5.55 for windows (64)

http://www.cnblogs.com/hikarusun/archive/2012/04/26/2471039.html Mysql安装配置

1、安装已经完成

2、配置系统环境变量\\添加系统环境变量是为了在命令控制窗口里更方便点。

新建:MYSQL_HOME ==> D:\mysql \\需要根据自己安装的地址修改

追加:PATH==>;%MYSQL_HOME%\bin

3、修改MySQL5.5的配置文件,把my-small.ini改名为my.ini进行编辑a)在[mysqld]下追-------

basedir = "d:\\mysql"    \\需要根据自己安装的地址修改

 

datadir = "d:\\mysql\\data"     \\需要根据自己安装的地址修改

 

character-set-server = utf8

-------

b) [client]下追加

-------

default-character-set = utf8

4、启动服务

 

保存my.ini的配置, 然后打开命令行(开始菜单==>运行==>cmd

输入: mysqld --console 然后回车将看到如下类似内容:

-------

C:\Windows\system32>mysqld --console

120410 14:25:22 [Note] Plugin 'FEDERATED' is disabled.

120410 14:25:22 InnoDB: The InnoDB memory heap is disabled

120410 14:25:22 InnoDB: Mutexes and rw_locks use Windows interlocked functions

120410 14:25:22 InnoDB: Compressed tables use zlib 1.2.3

120410 14:25:22 InnoDB: Initializing buffer pool, size = 128.0M

120410 14:25:22 InnoDB: Completed initialization of buffer pool

120410 14:25:22 InnoDB: highest supported file format is Barracuda.

120410 14:25:22 InnoDB: Waiting for the background threads to start

120410 14:25:23 InnoDB: 1.1.8 started; log sequence number 1595675

120410 14:25:23 [Note] Event Scheduler: Loaded 0 events

120410 14:25:23 [Note] mysqld: ready for connections.

Version: '5.5.22' socket: '' port: 3306 MySQL Community Server (GPL)

-------

==> 证明mysql服务已启动

 

我进行同样操作出现问题,显示如下:

未能启动。

[ERROR] Can't start server: Bind on TCP/IP port: No such file or directory  

[ERROR] Do you already have another mysqld server running on port: 3306 ?  

[ERROR] Aborting  

端口3306被占用。

百度解决办法: 1、用命令 netstat -ano|findstr "3306" 查看3306占用情况

TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       5164

2、用命令taskkill /f /pid 5164杀掉5164

   成功: 已终止 PID 5164 的进程。

尝试再次启动Mysql

 

启动成功。

三.下载navicat,或者是Hedisql,连接Mysql

http://dl.dykxgww.com/soft1/navicatformysql.zip 下载

navicat for mysql)10.1.7 绿色中文版 

解压完成

连接Mysql成功。

四.创建出来报名贴的业务表,并将表结构粘贴到日报中,对比之前师兄的表结构设计,看看有什么差别

基本一样对象数量略有区别,可能报名模板不一样?

还有我在ID那一行设置了主键,若不设置会无法保存,袁帅师兄所发截图并没有设置,经过尝试,若ID不设置自增则不用设置主键也可以保存。

五.使用navicat设计mysql数据库,数据库的每一个表中都要有三个基本的字段,ID(自增Long),create_at,update_at(所有的时间都用Long)

如上图。

.从报名贴中找一条最近报名的师弟,用Mysql插入这条数据,并能够根据姓名查出来这条记录

姓名:童志荣

QQ602840329

修真类型:java工程师

预计入学时间:201758

毕业院校:上海应用技术学院

线上学号:java-1827

日报链接:https://www.jnshu.com/daily/22049?uid=11081

立愿:3个月后拿到offer

审核师兄:成都分院-李昂

引荐师兄:成都分院-李昂

从何处了解到的修真院:知乎

 

Navicat里录入董志荣同学的信息(疑问:日期如何录入?20170508?

 

Select出来很乱,百度学到用\G结尾可以改变显示方式

 

下面使用insert语句插入另外一条数据

姓名:韩筠宜          name

QQ512952376          qq

修真类型:前端工程师        profession

预计入学时间:2017518      join_date

毕业院校:河海大学         gschool

线上学号:css-2508         online_class

日报链接:http://www.jnshu.com/daily/22881?uid=7777  daily_url

立愿:3个月后拿到offer        oath

NULL            introducer

NULL            auditor

辅导师兄:[深圳分院|内门弟子]CSS-覃腾波    conselor

从何处了解到的修真院:知乎       resource

Insert into apply(create_at,update_at,name,qq,profession,join_date,gschool,online_class,daily_url,oath,introducer,auditor,conselor,resource)

Value(20170515,20170515,韩筠宜,512952376,前端工程师,20170518,河海大学,css-2508,http://www.jnshu.com/daily/22881?uid=7777,3个月后拿到offer ,NULL,NULL,[深圳分院|内门弟子]CSS-覃腾波,知乎);

 

添加完成,期间遇到问题insert into apply() value()中需要一一对应,不然会报错或者录入错误

根据姓名查找记录:select * from apply where name=董志荣 \G

 

查找成功。

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

Navciat 直接修改oath 就行了。

Sql语句使用update apply set oath=replace(oath,"3个月后拿到offer","老大最帅");

apply表中的 oath字段中的“3个月后拿到offer”替换为“老大最帅”。

 

.将表导出成Sql文件,并使用navciatSql分别尝试删除此条数据,并用之前备份的Sql恢复。

首先参考袁帅师兄日记,总结并熟悉一下“插入数据”,“查询数据”,“更新”,“删除”等操作:

向表中插入数据

insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:

insert into 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);

查询表中的数据

select 语句常用来根据一定的查询规则到数据库中获取数据, 其基本的用法为:

select 列名称 from 表名称 [查询条件];

按特定条件查询:

where 关键词用于指定查询条件, 用法形式为: select 列名称 from 表名称 where 条件;

更新表中的数据

update 语句可用来修改表中的数据, 基本的使用形式为:

update 表名称 set 列名称=新值 where 更新条件;

删除表中的数据

delete 语句用于删除表中的数据, 基本用法为:

delete from 表名称 where 删除条件;

练习:

插入自己的信息:

姓名:苏笑           name

QQ233403212          qq

修真类型:java工程师         profession

预计入学时间:2017530      join_date

毕业院校:天津大学         gschool

线上学号:java-1913         online_class

日报链接:NULL          daily_url

立愿:3个月后拿到offer        oath

NULL            introducer

NULL            auditor

辅导师兄:NULL          conselor

从何处了解到的修真院:知乎       resource

Insert into apply(create_at,update_at,name,qq,profession,join_date,gschool,online_class,oath,resource)

Value(20170515,20170515,苏笑,233403212,java工程师,20170530,天津大学,java-1913,3个月后拿到offer ,知乎);

查询苏笑的毕业学校列:

Select gschool from apply where name=苏笑;

 

更新苏笑的立愿为:“学不好JAVA把键盘吃了”

Update apply set oath=学不好JAVA把键盘吃了 where name=苏笑;

 

导出表结构及表数据mysqldump 用法  

命令行下具体用法如下:  mysqldump -u用戶名 -p密码 -d 數據库名 表名 脚本名;

    1、导出數據库為dbname的表结构(其中用戶名為root,密码為dbpasswd,生成的脚本名為db.sql

    mysqldump -uroot -pdbpasswd -d dbname >db.sql;

    2、导出數據库為dbname某张表(test)结构

    mysqldump -uroot -pdbpasswd -d dbname test>db.sql;

    3、导出數據库為dbname所有表结构及表數據(不加-d

    mysqldump -uroot -pdbpasswd  dbname >db.sql;

    4、导出數據库為dbname某张表(test)结构及表數據(不加-d

mysqldump -uroot -pdbpasswd dbname test>db.sql;

现在导出 test数据库里的apply表的结构及数据;

Mysqldump -uroot -p920901 test apply>apply.sql;  (经过尝试该命令:导出到当前路径)

Mysqldump -uroot -p920901 test apply>c:\apply.sql;  (导出到C盘根目录)

删除oath=老大最帅 这一行

 

已经删除掉了。导入刚刚导出的apply.sql

mysql -u用户名 -p密码 数据库名 < 数据库名.sql

mysql -uroot -p920901 test< C:\Users\Administrator\Desktop\MySQL文件\apply.sql

 

第一行又回来了。

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

http://www.jb51.net/article/32149.htm 添加索引教程

1.添加PRIMARY KEY(主键索引)

mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

 2.添加UNIQUE(唯一索引)

mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column`  )

 3.添加INDEX(普通索引)

mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

 4.添加FULLTEXT(全文索引)

mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

 5.添加多列索引

mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

修改表中的索引:

 alter table tablename drop primary key,add primary key(fileda,filedb)

 

给姓名(name)添加索引

alter table apply add index(name);

显示索引:show index from apply;

 

思考:我认为 qq、修真类型、班级、毕业院校、线上学号,这些内容不需要频繁更新,而且可能会经常作为查询条件,应该添加索引。

 

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

Insert into apply(create_at,update_at,name,qq,profession,join_date,gschool,online_class,daily_url,oath,introducer,auditor,conselor,resource)

Value(NULL,NULL,李狗蛋,512952376,前端工程师,20170518,清华大学,css-2577,http://www.jnshu.com/daily/22881?uid=7777,两年月薪5,NULL,NULL,李二狗,知乎),(NULL,NULL,王二麻,512952376,前端工程师,20170518,哈哈尔滨工业大学,css-2587,http://www.jnshu.com/daily/22881?uid=7777,成为海贼王,NULL,NULL,李大爷,知乎),(NULL,NULL,王三麻,512952376,前端工程师,20170518,南京大学,css-2587,http://www.jnshu.com/daily/22881?uid=7777,成为码农,NULL,NULL,李大爷,知乎),(NULL,NULL,王四麻,512952376,前端工程师,20170518,武汉大学,css-2587,http://www.jnshu.com/daily/22881?uid=7777,成为天下第一,NULL,NULL,白大妈,知乎),(NULL,NULL,王五麻,512952376,java工程师,20170518,南开大学,css-2587,http://www.jnshu.com/daily/22881?uid=7777,成为火影,NULL,NULL,肖大爷,知乎),(NULL,NULL,王六麻,512952376,前端工程师,20170518,华中科技大学,css-2587,http://www.jnshu.com/daily/22881?uid=7777,成为海贼王的男人,NULL,NULL,王大妈,知乎),(NULL,NULL,王七麻,512952376,前端工程师,20170518,哈哈尔滨工业大学,css-2587,http://www.jnshu.com/daily/22881?uid=7777,成为海贼王,NULL,NULL,李大爷,知乎);

添加之后有了11条数据:

 

首先把之前给name添加的索引删除掉

Drop index name on name;

无索引下执行select * from apply where name='王五麻';

name 添加索引:alter table apply add index(name);

添加索引后执行select * from apply where name='王五麻';

添加索引前后执行时间都是0.00 sec 可能数据太少感受不到区别,之后数据多了再比较

 

十一.查看深度思考中Mysql相关的一些问题,将自己思考的结果写在日报中,并查阅之前师兄的日报,看看是否有合自己思路接近或者是完全不一致的地方。

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

应该是使用Long节省空间,提高效率

自增ID有什么坏处

自增ID在复制的时候可能会出现重复

而且删除一个之后,再添加新的依然会自增,导致ID不连续

什么样的场景下不使用自增ID

不知道!

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

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

创建索引可以大大提高系统的性能。

第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

增加索引也有许多不利的方面。

第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引:在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:

第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。

第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。

第三,对于那些定义为text, imagebit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。

第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。

十二.下载Java 7,并配置环境变量,百度搜索一下JDKJRE的区别,并将结论用自己的话写在日报中。

JDK用于开发,提供了开发和运行环境

JRE用于运行,只提供了运行环境

 

 

明日计划

明日争取将该任务完成。

遇到问题

表中的汉字显示出来是乱码,每次运行前需要输入set names gdk; 才能显示正常,还没找到办法“一劳永逸”。

 

 

收获

第一天学习,刚开始没有方向不知道如何下手,看了师兄的日记之后有了突破口,借助网络资源逐步学习,解决问题,感觉不错;

初次接触数据库(其实大学有课,然而没听课),学会了navicat for MySQL 的一些图形操作以及命令行操作,收获颇丰。



返回列表 返回列表
评论

    分享到