
文章插图
6)Select tables optimized away:使用某些聚合函数(比如max、min)来访问存在索引的某个字段是

文章插图
附:1、派生表
派生表,是用于存储子查询产生的结果的临时表,这个子查询特指 FROM 子句 里的子查询,如果是出现在其它地方的子查询,就不叫这个名字了,所以本质上来说,派生表也是临时表 。
2、物化表
物化表,也是用于存储子查询产生的结果的临时表,这个子查询特指 WHERE 子句中查询条件里的子查询 。
前导列:
前导列,就是在创建复合索引语句的第一列或者连续的多列 。比如通过:CREATE INDEX comp_ind ON table1(x, y, z)创建索引,那么x,xy,xyz都是前导列,而yz,y,z这样的就不是 。
3、dual表
Dual表其实就是一个虚表,你可以在没有表的情况下指定这个虚拟的表名 。
4、int(1)、int(2)、int(3)...int(10)有什么区别?
不知道大家对于上面ken_len列的计算是否有疑问,为什么像int这类数据类型就是4字节,而不是int(num)中的num字节接下来就给大家解释一下 。
Mysql中int是占4个字节,那么对于无符号的int,最大值就是2^32-1 = 4294967295
int后面的数字不能表示字段的长度,int(num)一般加上zerofill才有效果,它能够实现当该字段不足num位时补0的效果 。
下面我们给出一个例子:
首先我们创建一个测试表
CREATE TABLE `intTest` (`id` int(1) ZEROFILL UNSIGNED NOT NULL,`test` int(1) UNSIGNED ZEROFILL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;测试表中id列,test列是一个无符号整型,且设置的是int(1),那么他是不是意味着不能插入4294967295这个4字节的最大数字,接下来我们就插入4294967295试一下:
[SQL]INSERT INTO `inttest` VALUES(4294967295,4294967295);
受影响的行: 1
时间: 0.013s

文章插图
可以看到成功插入,没有报错,也就说明int(1)并没有限制只有1个字节,接下来我们把test字段的int中的位数改成5,id列不变并都插入数字1看一下有什么效果,

文章插图
可以看到test列为int(5),所以在不满足5位的时候会在前面补零,因为我们加上了zerofill属性,而id列我们设置了int(1)他就不会补零 。这里面说明一下;为什么用命令行看:因为在navicat中他是不显示这个零填充(小编的navicat是显示不出来的)

文章插图

文章插图
这里面还有一个小细节:其实我们在给某一列增加zerofill属性的时候,mysql会自动增加一个unsigned属性,我们可以看一下:
我们新增加一列test1:
ALTER TABLE `intTest` add COLUMN `test1` int(3) ZEROFILL;向test1中插入负数
INSERT INTO `inttest` VALUES(2,2,-2);此时会发生报错;因为小编的mysql处于严格模式下
SET sql_mode ="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";修改模式,再次插入

文章插图

文章插图
可以看到,插入负数的时候会存储为0,mysql会自动设置该列为无符号整数 。
zerofill默认为int(10),int默认为int(11)
下面我们做一个示例:
ALTER TABLE `intTest` add COLUMN `test2` int ZEROFILL;ALTER TABLE `intTest` add COLUMN `test3` int;
经验总结扩展阅读
- 迷你世界10月19日激活码是多少
- 幼儿园国庆节放假通知及温馨提示
- 头伏吃什么二伏吃什么三伏吃什么
- SpringBoot+Vue3 AgileBoot - 手把手一步一步带你Run起全栈项目
- 能够满足你一切少女心的星座男
- 越容易追到你就越容易抛弃你的星座
- 运动 减肥的尽头,其实是提高代谢,10个方法让你从125瘦到95斤
- 怎么p图(手机怎么p图改数字)
- 怎么判断自己是不是恋爱脑 这8种表现有你吗
- 短而精的个性签名有内涵 你一定会喜欢的签名