发表于: 2016-11-30 21:42:13
1 2026
今日完成的事情:
(1)任务1-6
学到了用show variables like '%char%';查看mysql字符集。
用set names gb2312解决了昨天的乱码问题。问题似乎是来源于CMD的活动代码页使用了GB2312编码,我将cmd的活动代码页编码改成了utf8,与数据库相同,但此时不能输入中文,用处不大。
用TRUNCATE TABLE student清空了student表。
select * from student where name = "李博宇"
(2)任务1-7
UPDATE student SET goal = "老大最帅" WHERE name= "李博宇";
(3)任务1-8
navicat 导出是用“导出向导”,导入则用“运行sql文件”。
mysql 删除用 DELETE FROM student WHERE id = 1;
(4)任务1-9
create index NameIndex on Student (name);而navicat的索引设置在“设计表”选项卡中。
有可能作为查找项的都能建立索引,例如QQ,毕业院校,报名日期等。
(5)任务1-10
录入了10条数据,但索引的作用不大,一定是因为数据规模太小了。
(6)任务1-11
这些问题我都没什么实际经验,尝试答一下,请前辈指正。
问:为什么DB的设计中要使用Long来替换掉Date类型?
答:因为Long可以用unix时间戳。unix时间戳是秒数,在程序设计的时候更方便。
问:自增ID有什么坏处?什么样的场景下不使用自增ID?
答:根据实验来看,当删掉某一条数据后,自增ID会跳过它继续增加,这样会导致数据库里的ID并不是连续的。
不使用自增ID的场景大概就是要求ID必须连续增加1的场景吧。
问:什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
答:索引就是用某种算法来降低查找的时间复杂度,不建立索引时查找会从头到尾遍历,此时的时间复杂度是O(n),而B树算法的时间复杂度是O(log2 n)。
只要查询操作远多于插入数据操作,绝大多数时候时候建立索引都是有性能优势的。
问:唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
答:唯一索引是指建立索引的属性值不能重复,具有唯一性。
而普通索引的属性的值是可以重复的。
问:如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
答:应该不需要吧?这里唯一性约束应该是数据库软件自动实现的吧。
问:CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
答:CreateAt在Insert语句赋值,UpdateAt在Update语句时赋值,只在用sql语句对数据库进行操作时赋值。这两个属性对外部应该是只读吧。
问:修真类型应该是直接存储Varchar,还是应该存储int?
答:应该是int更好。我想到的理由是int位数更少,可以减少数据库的操作时间。
问:varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
答:varchar的长度上限可以由用户自己设置,而text一定是65535byte,而longtext一定是4294967295byte。
这三种类型实际占用的空间都和字符串具体长度差不多大。
问:怎么进行分页数据的查询,如何判断是否有下一页?
答:先用SELECT count(*) from student取得总记录数,然后除以一页显示的记录数得出总页数。
然后用SELECT xxx from student limit (当前页数x一页显示的记录数),(一页显示的记录数)取出当前页。
最后判断当前页是否等于总页数,相等就没有下一页了。
问:为什么不可以用Select * from table?
答:可能是因为Select * 会列出所有属性,影响性能吧。
明天计划的事情:
这几天人在外地,学习状况有点差,尽量推进学习进度吧,力争在3号之前完成任务1。
遇到的问题:
问题很多,解答过程都写在上面了,或有疏漏。
收获:
除了完成的任务之外,还买了本数据库教材,重新复习了一下SQL语句和模型,之后打算看一看数据库设计的章节。
评论