每日一题,你来投稿,我来解答!
1、Drop、Truncate、Delete的区别
1、Drop: 删除数据内容和定义,并释放空间
2、Truncate: 删除数据内容、释放空间,但不删除定义,并且重新设置索引ID从1开始,不触发Delete触发器,不能Rollback,且不能携带条件删除。
3、 Delete: 删除数据内容、不释放空间、不删除定义、可以携带条件,可以进行Rollback,效率低于Truncate,因为它相当于一行行的删除。
2、为什么varchar默认长度是255
1、 mysql要求varchar一个行的定义长度不能超过65535bytes,这个大小包括了字段占用的空间在内,text和blob等大字段除外(注: 单行最大限制指的就是一张表中所有字段的所设置的长度总和不得超过65535字节)
2、 InnoDB存储引擎的表索引的前缀长度最长是: 767字节,如果需要创建索引,不能超过这个长度。而utf-8编码时: 255 * 3(一个字符占3个字节) = 765字节,恰恰是能够建立索引的最大值。单列索引的长度的限制(5.6里面默认不能超过767bytes,5.7不超过3072bytes)
3、总结: varchar(255)不是最优的字符长度,最优的需要按照具体情况来,但是这个长度可以保证你能少出错的一个不错的默认值
想了解更多或者投稿,欢迎关注和私信回复【每日一题】或【面试资料】。