发表于: 2018-03-18 20:29:22
1 568
day2
今天完成的事情:
1.继续学习SQL语句,加强对数据库操作的能力。
1.1 增加/插入数据
insert into 表名 values(字段值1,字段值2,...字段值n);
——>依次全部的插入数据,不能多值或少值,即指定表有几个字段就要插入几个值。
——>当字段值为字符型时,用单引号括起,如‘字段值’,以下同理
insert into 表名(字段名,字段名,字段名) values(字段值,字段值,字段值);
——>向指定表的指定字段中,插入指定值,即仅为所需要的字段赋值,没有赋值的为null
任务实践:
建表+插入数据
1.2 修改/更新数据
update 表名 set 字段名=字段值;
——>一般少用,因为它更改的是该column下所有row的值,批量改
update 表名 set 字段名=字段值,字段名=字段值... where 字段名=字段值;
如:update student set gender='女',age=24 wherr id=5;
-->修改指定ROW的多个字段名的值,常用
任务实践:
1.3 删除数据
delete from 表名; 删除表里的所有数据,慎用
truncate table 表名; 同样是删除表内所有数据
-->truncate和delete比较:
->都是全表删除
->truncate除了删除表内数据还删除了表的约束(如自增长约束),
->truncate不能像delete一样加where变为加条件删除
->delete删除支持回滚,truncate则不能。
总结:truncate是喝了百草枯死绝了,delete是喝了假的百草枯
delete from 表名 where 字段名=字段值; 删除指定ROW的数据,常用
删除表
1.4 查询数据
根据名字查询数据
2.完成 TASK1-8 的备份与恢复。
完成插入数据测试,未发现添加索引与否对执行效率的显著影响,私想在更多数据的处理中可能会有差异。
3.索引
创建索引
CREATE INDEX 索引名 ON 表名(字段名); 创建指定表的指定字段名为指定名的索引
MySQL Key值(PRI, UNI, MUL)的含义:
PRI 主键索引;
UNI 唯一索引;
MUL 普通索引(可以重复)。
除了给名字添加索引,还可以单开一列,将与业务数据无关的一列设为索引。
4.深度思考mysql相关
为什么DB的设计中要使用Long来替换掉Date类型?
date类型要求有一定的格式,稍微不对会报错,而long相对来说要友好些吧。
自增ID有什么坏处?什么样的场景下不使用自增ID?
自增ID删除数据后出现断层,不像原来那样连续了,单独一张表还好,跨表操作时会有一定弊端,具体什么弊端
还不是太清楚,有待研究。
什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
索引应该就像一本书的目录,适用于大数据量的查询,具体其实我也不懂,有空需要看下数据库原理进修下。
参考:https://www.cnblogs.com/sweet521/p/6203360.html,
http://imysql.com/2017/08/08/quick-deep-into-mysql-index.shtml。
唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
普通索引的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。在需要避免数据重复的场合中使用。(参考:http://blogcsdn.net/wujizkm/article/details/50497642)
如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
需要,虽然qq号是不重复的,但是如果出现万一重复的情况(比如输错了),数据库会报错,所以还是提前检查下。
CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
分别在数据被创建和修改时由系统赋值,不应该开放给外部调用,而是作为数据自身的一种属性存在。
修真类型应该是直接存储Varchar,还是应该存储int?
可以存储为int,用不同的编号来代替不同的类型,数字的读取效率应该比字符快,且省空间。
varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
varchar为变长字节,所占空间为字符串实际长度加1,最长为65535个字节,而longtext也是变长字符存储,只保存字符数据,最长为4294967295字节,比较适合存储大内容,另外还有char,它是定长格式的,但是长度范围是0~255. 当你想要储存一个长度不足255的字符时,mysql会用空格来填充剩下的字符。因此在读取数据时,char类型的数据要进行处理,把后面的空格去除。 varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节(注意是字节而不是字符)的数据(起始位和结束位占去了3个字节), text其最大长度是2的16次方-1。
怎么进行分页数据的查询,如何判断是否有下一页?
这个不知道,待补充。
为什么不可以用Select * from table?
* 查询的是这个表中的所有列,但是一般情况下我们只需要查询某一个或多个字段,而不需要所有字段都查询,
这样会影响效率,所以在明确知道自己所需字段的情况下不推荐使用SELECT * FROM TABLE。
5.任务1-12
由于以前学过点Java,环境早就配好了,下载安装后配置java_home、class_path、path环境变量。
并在命令行输入java或javac验证。
JDK就是Java Development Kit,一般指软件开发包,像一个工具包一样,里面有钳子锤子各种工具;
JRE Java Runtime Enviroment是指Java的运行环境,JRE就象一台PC机一样,
我们写好的 Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行 。
6. 数据库字符集utf8_general_ci、utf8_unicode_ci和utf8_bin的区别:http://blog.csdn.net/flqljh/article/details/49834843
明天计划的事情:
下载Maven3,并配置好环境变量,这东西第一次用,明天好好了解下
着手任务1-15、16、17,了解下JdbcTemplate和Mybatis是什么,怎么使用,开始真正的写Java代码。
遇到的问题:
关于索引的问题,他究竟是怎样的一直存在,还有数据库的内部机理,都勾起了我的求知欲,目前碰到的都是些理论上的问题,需要慢慢感悟
工程上的问题就是就是那插入10条数据,我想用存储过程写个循环直接插入,可是居然报错,明天再看吧,晚上出去散散步
存储过程代码及报错
收获:
1.学习了基本的增删查改数据库的操作
2.了解了索引相关的一些知识,虽然只是些浅显的东西
3.在那个深度思考的问题上,让我感受到了知识海洋的广大,吾生也有涯而知也无涯,问题的表象下永远藏着内在机理,激发人求索的欲望。
同时也希望尽快完成日报要求,尽快去内门学习,和大家一起交流问题。
评论