自增列不能直接修改,必须将原有ID列删除,然后重新添加一列具有identity属性的ID字段。比如你要修改的字段名为ID:altertable表名dropcolumnIDaltertable表名addIDintidentity(1,1)
那就不能是add添加了,而应该是更改modify
不过下一条就没那么顺利了
这才意识到createtime和updatetime是哪来的?但是createtime修改成功了,updatetime没有???
看了看表的设计,发现是这样的
再次确认了一下最开始的任务,发现:
3)又想到可不可以随机生成大量模拟数据,然后插入?
结果是php语句不会用,也看不懂【囧】
那试试另外的方法吧,比如
结果还是不行,不仅仅是因为这是从网上搜来的,还因为我根本就看不懂【(/□\)】,罢了罢了
4)一条一条插吧
好吧,循环了十遍,语句是一样的,反正是模拟数据!
下面是查看已经建立的索引
名?栏位?不都是column吗?!
这时候又有问题了,昨天的索引忘了怎么建了!!!幸好有日报!
发现是先命名一个索引,再去添加到具体某一列的,那该怎么查呢
先等等,来看这个!
好,接下来继续测试索引的功能!
开始补上昨天没写的答案!
发现几个同门师兄写的不错
5.为什么DB的设计中要使用Long来替换掉Date类型?
自己理解:之前看的date类型有好多,比如YYMMDD,还有加上时分秒的,类型比较复杂,操作起来不如long方便,特别是插入数据的时候
6.自增ID有什么坏处?什么样的场景下不使用自增ID?
自己理解:
所有插入的数据id必须是顺序排列的,如果遇到id是无序的,不能自己操作
参考同门:
7.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
有时候查数据的时候不是查出所有的,只是个别数据的话会遍历整个表,极大的影响效率,而建立的索引可以将之前查出的数据通过索引备份,下次查找的话优先查找索引,降低重复率。
表的主关键字自动建立唯一索引如zl_yhjbqk(用户基本情况)中的hbs_bh(户标识编号)表的字段唯一约束ORACLE利用索引来保证数据的完整性如lc_hj(流程环节)中的lc_bh+hj_sx(流程编号+环节顺序)直接条件查询的字段在SQL中用于条件约束的字段如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)select*fromzl_yhjbqkwhereqc_bh=’<甼曀>7001’查询中与其它表关联的字段字段常常建立了外键关系如zl_ydcf(用电成份)中的jldb_bh(计量点表编号)select*fromzl_ydcfa,zl_yhdbbwherea.jldb_bh=b.jldb_bhandb.jldb_bh=’540100214511’查询中排序的字段排序的字段如果通过索引去访问那将大大提高排序速度select*fromzl_yhjbqkorderbyqc_bh(建立qc_bh索引)select*fromzl_yhjbqkwhereqc_bh=’7001’orderbycb_sx(建立qc_bh+cb_sx索引,注:只是一个索引,其中包括qc_bh和cb_sx字段)查询中统计或分组统计的字段selectmax(hbs_bh)fromzl_yhjbqkselectqc_bh,count(*)fromzl_yhjbqkgroupbyqc_bh
8.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
区别是表的列有没有和其它列组合。当列属性查找频率极高,建议是唯一索引。
唯一索引(unique):不允许任意两行具有相同索引值的索引。
主键索引(primary):数据表中经常有一列或多列组合,其职唯一标识要求主键中的每表中的每一行,则该列称为主键。个值都是唯一的,当查询时使用主键索引,他还允许对数据的快速访问。
聚集索引():表中行的物理顺序和表中的逻辑顺序相同。一个标志能有一个聚集索引。
如果一个索引不是聚集索引,则表中的数据的物理顺序和表中的逻辑顺序不相同。
不需要吧,索引和表中的数据是对应的,肯定存在。
唯一索引判重走的是索引,程序查询表判重走完索引还要返回给程序,显然唯一索引快。
要根据你的业务来确定:比如你这张表的数据在删除时并不是真正删除而是将is_deleted字段设置为1这样你就不能依靠数据库的唯一索引在防止重复数据
肯定是建立唯一索引判断重复数据最安全,最保险
唯一索引,则由数据库判断,一次insert即可,然后程序捕获异常处理。在大多数情况下效率略高。
11.修真类型应该是直接存储Varchar,还是应该存储int
自己理解:字符型和整形,你说呢。
12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
自己理解:一个varchar字符占4位,30位的长度按说可以容纳8个字符。必须是尽量多给。区别是varchar()是动态分配内存的
又查了一下varchar字节和字符的关系:
4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节);
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节;
又查了一下比特,字节,字符的关系
1位”表示为1bit“1个字节”表示为1Byte“1个字节”=“8位”即1Bytes=8bit因此“4个字节”=4*8位=32位此外,字母用用1个字节(即8位)进行表示和存储,而一个汉字则使用两个字节(即16位)进行表示和存储。两个字节表示一个有符号整数,范围是-32768~32767一个字节表示一个有符号整数,范围是-128~12713.怎么进行分页数据的查询,如何判断是否有下一页?
限制显示数据的数量,好像是limit关键字。看游标的末尾指向是不是当前显示的条数。
limit后面两个量分别是起始条数和取出的条数。
对比如下:
还是有问题,不过是函数的
那该怎么办呢,研究一下navicat的命令行!
14.为什么不可以用Select*fromtable
不可以用?我平时查看表的时候都是这样用的啊?!
可能是认为*会忽略索引全表扫描什么的,其实这关键看where字句怎么写.不过用select*会有一些额外的IO开销.最好还是写字段把,作为你的编程习惯.
*和列出全部字段在神马表扫描上没有区别。唯一有区别就是,*列出的字段是按照table的列来的,如果数据库那边把列换了位置,你就悲剧了。要是列出字段,就不存在这个问题了。这个没有任何效率可言
还多一个查询数据字典的过程
跳着来,上面的问题留到后面【贱贱的表情】
1)先说自己没搜索前的看法:
jdk是java的类库,各种API,各种已有功能的实现都被java开发者放到了这个库里面。
jre是java运行时环境,编译的字节码.class文件需要在这里面被解释运行
2)再来看看网上的解释:
三:疑难问题
数据库的问题比较多。还有好多没解决,,
四:思考总结
这个回寝室用手机做,,,,
来了,趁着刚做完运动,思维敏姐敏捷!现在想来,自己查资料的时候有一个问题,那就是看过之后能不能几句话总结作者想说明白的东西并且模仿作者用到的方法,直到能化为己用!这些以后要注意!
技术总结就是Navicat的命令行工具不好用(可能是我不了解),明天查查去!