首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQLMySQL 的 int(11) 到底代表什么意思?

一、前言   在工作中经常要与 mysql 打交道,但是对 mysql 的各个字段类型一直都是一知半解,因此写本文总结记录一番。 二、简介 ?   ...对于 int 类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的 int(11) 代表什么意思,很长时间以来我都以为这代表着限制 int 的长度为 11 位,直到有天看到篇文章才明白,11...代表的并不是长度,而是字符的显示宽度,在字段类型为 int 时,无论你显示宽度设置为多少,int 类型能存储的最大值和最小值永远都是固定的,这里贴一些原文片段。   ...那么照文中所说,所以无论怎么设置 int 类型的显示宽度,int 所能存储的最大值和最小值是固定的,那么这个显示宽度到底有什么用呢?   ...三、结论 从上个例子我们可以得出以下几个结论:   1、如果一个字段设置了无符号和填充零属性,那么无论这个字段存储什么数值,数值的长度都会与设置的显示宽度一致,如上述例子的字段 b,插入数值 1 显示为

3.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL什么要给表加上主键

    这就是为什么一个表只能有一个主键,一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置。   ...,那么就会出现多个独立的索引结构.字段的数据就会被复制一份出来,用于生成索引,叶子节点是主键ID,这也就是非聚集索引....,下面就是一个主键和三个常规索引的结构 4.通过主键去查,叶子节点就是数据行 5.通过其他索引字段去查,那么叶子节点是主键ID,然后再去根据主键查,聚集索引(主键)是通往真实数据所在的唯一路径 7....有一种例外可以不使用聚集索引就能查询出所需要的数据,这种非主流的方法称之为「覆盖索引」查询,也就是平时所说的复合索引或者多字段索引查询 以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈...不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql

    2.5K20

    什么MySQL主键查询这么快

    能啊,这篇文章的题目就是关于主键啊,我们可以按照主键的顺序,从小到大来串联当前数据页的所有记录。事实上,MySQL的设计者也确实是这么设计的。...番外:为什么推荐使用自增ID作为主键,而不推荐使用UUID?...接下来我们向表多添加几条数据,看看分组到底是什么回事儿?需要注意的是,由于我们已经在表中指定了主键id,因此DB_ROW_ID这个参数不会再画出来了。...而且每个槽代表的“组长”的主键值也是从小到大进行排列的,所以我们可以用二分法进行槽的快速查找。图中包含4个槽,分别是0、1、2、3,二分法查找之前,最低的槽low=0,最高的槽high=3。...但是对于我们这篇文章的主题——MySQL主键查询为什么这么快,只能算是回答了一半,毕竟在数据页中进行搜索的前提是你得先找到数据页啊。这就是每次面试必问的MySQL索引的知识了,下一篇文章再介绍吧。

    4.1K92

    MySQL自增主键什么不连续

    自增主键可以让主键索引尽量的保持递增顺序插入,避免页分裂,索引更加紧凑。 自增主键保存在何处?...不同的引擎对于自增值的保存策略不同: MyISAM引擎的自增值保存在数据文件 InnoDB引擎的自增值保存在内存里,但是在MySQL8.0以后,该自增值才可以被持久化:MySQL5.7以前,自增值没有持久化每次重启后第一次打开表的时候...,会找自增值的最大值max(id),然后将最大值加1作为这个表的自增值;MySQL8.0版本会将自增值的变更记录在redo log,重启时依靠redo log恢复。...事务回滚为什么自增值不能回退 两个并行的事务在申请自增值的时候,为了避免两个事务申请到相同的自增id,需要加锁按照顺序申请,如果自增值可以回退需要做一些特殊处理: 每次申请id之前,判断表里此id是否存在...有一个批量申请自增id的策略: 语句执行过程,第一次申请自增id,分配1个 1个用完以后,第二次申请,会分配2个 2个用完以后,第三次申请,会分配4个 依此类推,每次申请都是上一次的两倍(最后一次申请不一定全部使用

    8.4K20

    mysql什么建议使用自增主键

    但是如果你要弄明白什么是页分裂,或者什么情况下会页分裂,这个时候你就需要对 mysql 的底层数据结构要有一定的理解了。...的数据都是按顺序保存在 B+ 树上的(所以说索引本身是有序的)。...如果主键是非自增 id,为了确保索引有序,mysql 就需要将每次插入的数据都放到合适的位置上。...当往一个快满或已满的数据页插入数据时,新插入的数据会将数据页写满,mysql 就需要申请新的数据页,并且把上个数据页的部分数据挪到新的数据页上。...其实对主键 id 还有一个小小的要求,在满足业务需求的情况下,尽量使用占空间更小的主键 id,因为普通索引的叶子节点上保存的是主键 id 的值,如果主键 id 占空间较大的话,那将会成倍增加 mysql

    5K31

    MySQL主键为0和主键自排约束的关系

    我觉得也就这几种情况吧,无符号的情况应该没什么区别,还有什么没有考虑的希望大家给我留言,可以告诉我你是怎么想的,我也很想知道,现在抛砖引玉我把我的总结和想法写一下:   对我来说,0在数据库里很特殊。...如果使用主键自排约束以前表里有0,再设置完主键自排以后所有的0又不会根据行数,而是直接按照自上而下的顺序从1开始排。...如果把表的某个主键的数改成0,那直接就会进行排序放到正数前面,也就是说主键自排是允许有0存在的,那为什么本身存在的0要去修改成从1开始的递增序列呢?...哪怕没加主键自排以前只有一个0,加了主键自排以后还是会变成1。   开始有0,增加主键自排约束,0依次变为1,2,3,4.......   ...开始没0,增加主键自排约束,新添加的主键是0的行会根据行数自行变化,注意这里是新添加的行,使用的是insert。   开始没0,把某个主键的数修改成0,这个0会直接在排好序了再在表里显示出来。

    4.3K30

    MySQL主键自增值为什么有“空洞”?

    最终发现了MySQL主键自增值“空洞”了 1.场景准备 测试场景为MySQL 8.0: 主键重复场景 唯一键重复场景 1、建表,包含主键及唯一约束 CREATE TABLE t1( id int(....uk_c1' | +---------+------+----------------------------------------+ 1 row in set (0.00 sec) 在测试过程惊奇的发现测试表主键自增列发生了改变...# 测试主键重复 mysql> replace into t1 values (1,'aaa', 111); Query OK, 2 rows affected (0.00 sec) mysql> select...InnoDB引擎的自增值,其实是保存在了内存里,并且到了MySQL 8.0版本后,将自增值的变更记录在了redo log,当MySQL发生重启的时候依靠redo log恢复重启之前的自增值。...技术分享 | 微服务架构的数据库为什么喜欢分库分表?

    2.2K20

    MySqlInnoDB表为什么要建议用自增列做主键

    B+ 树的特点: 所有关键字都出现在叶子结点的链表(稠密索引),且链表的关键字恰好是有序的; 不可能在非叶子结点命中; 非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层...; 2、主键(PRIMARY KEY) 如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引...这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15...(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存清掉...《高性能MySQL的原话 ? ?

    3.9K20

    你真的知道 GO nil 代表什么吗?

    本篇文章主要是来聊聊 Golang 关于 nil 的使用方式及理解,看看有没有你还不知道的情况呢?...以 nil 作为零值的数据结构,同样有自己所占用的空间,占用空间的大小也是不一样的,Golang 可以使用 unsafe 包的 Sizeof 方法来进行查看 func main() { log.SetFlags...可以看到文末的历史文章 切片零值 nil 我们知道,切片的底层数据结构是,一个指针 ptr,一个 cap 表示切片容量,一个 len 表示切片中已有数据的长度 所以,看到这里,对于理解切片的 nil 为什么占用空间是...从 nil 通道读取数据 例如,若定义一个 channel ,var ch chan int 从 nil 通道读取数据会阻塞: <- ch 写入数据到 nil 通道 写入数据到 nil 通道会阻塞...希望能够对你有帮助 文中提到的技术点,感兴趣的可以查看这些文章: GO slice 的实现原理 GO map 的实现原理 关于 interface{} 会有啥注意事项?

    47930

    什么MySQL不推荐使用uuid作为主键

    前言 在mysql设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用...uuid,使用uuid究竟有什么坏处?...那么为什么会出现这样的现象呢?...当达到页面的最大填充因子时候(innodb默认的最大填充因子是页大小的15/16,会留出1/16的空间留作以后的修改): ①下一条记录就会写入新的页,一旦数据按照这种顺序的方式加载,主键页就会近乎于顺序的记录填满...在实际的开发还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。

    4.9K30

    Kafka的HW、LEO、LSO等分别代表什么

    下图表示一个日志文件,这个日志文件只有9条消息,第一条消息的offset(LogStartOffset)为0,最有一条消息的offset为8,offset为9的消息使用虚线表示的,代表下一条待写入的消息...上图中offset为9的位置即为当前日志文件的 LEO,LEO 的大小相当于当前日志分区中最后一条消息的offset值加1.分区 ISR 集合的每个副本都会维护自身的 LEO ,而 ISR 集合中最小的...在同步过程不同的副本同步的效率不尽相同,在某一时刻follower1完全跟上了leader副本而follower2只同步了消息3,如此leader副本的LEO为5,follower1的LEO为5,follower2...而在异步复制的方式下,follower副本异步的从leader副本复制数据,数据只要被leader副本写入就会被认为已经成功提交。

    5.3K20

    mysql清空表数据,并重置主键为1

    MySQL清空表数据,并重置主键为1 ️ 摘要 在本文中,我将向大家展示如何在 MySQL 数据库清空表的所有数据,并将主键重置为 1。...在软件开发过程,特别是在开发和测试阶段,我们经常需要清空数据库表并重新开始。这种情况下,仅仅删除数据是不够的,最好还能将主键(通常是自增的)重置为 1。今天,我将向你们展示如何做到这一点。...清空表数据 在 MySQL ,你可以使用 TRUNCATE TABLE 语句来清空一个表。这不仅会删除表的所有数据,还会释放用于存储数据的空间。...命令的一个额外好处是,它会重置表的自增主键为 1。...总结 清空 MySQL 表数据并重置主键为 1 是一个非常简单但有用的操作,特别是在开发和测试阶段。通过使用 TRUNCATE TABLE 或 ALTER TABLE 语句,你可以轻松完成这个任务。

    42910

    图解|12张图解释MySQL主键查询为什么这么快

    这是图解MySQL的第3篇文章,这篇文章会让大家清楚地明白: 什么是InnoDB行格式?InnoDB页是什么? InnoDB页和InnoDB行格式都有哪些字段信息?...为什么推荐使用自增ID作为主键,而不推荐使用UUID? InnoDB设计者如何设计高效算法,快速在一个页搜索记录。 正文开始!...能啊,这篇文章的题目就是关于主键啊,我们可以按照主键的顺序,从小到大来串联当前数据页的所有记录。事实上,MySQL的设计者也确实是这么设计的。...而且每个槽代表的“组长”的主键值也是从小到大进行排列的,所以我们可以用二分法进行槽的快速查找。 图中包含4个槽,分别是0、1、2、3,二分法查找之前,最低的槽low=0,最高的槽high=3。...但是对于我们这篇文章的主题——MySQL主键查询为什么这么快,只能算是回答了一半,毕竟在数据页中进行搜索的前提是你得先找到数据页啊。这就是每次面试必问的MySQL索引的知识了,下一篇文章再介绍吧。

    81010

    Mysql为何建议使用自增id作主键,有什么优点

    假设你的表确实有一个唯一字段,比如字符串类型的身份证号,那应该用身份证号做主键,还是用自增字段做主键呢? 由于每个非主键索引的叶子节点上都是主键的值。...显然,主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小。 所以,从性能和存储空间方面考量,自增主键往往是更合理的选择。 有没有什么场景适合用业务字段直接做主键的呢?还是有的。...InnoDB使用的是聚簇索引,将主键组织到一棵B+树,而行数据就储存在叶子节点上,若使用"where id = xxx"这样的条件查找主键,则按照B+树的检索算法便可查找到对应的叶节点,以后得到行数据...若对其他字段列进行条件搜索,则须要两个步骤:第一步在辅助索引B+树检索其他,到达其叶子节点获取对应的主键。第二步使用主键在主索引B+树种再执行一次B+树检索操做,最终到达叶子节点便可获取整行数据。...(重点在于经过其余键须要创建辅助索引) 聚簇索引的优缺点排序 优势: 数据访问更快,由于聚簇索引将索引和数据保存在同一个B+树,所以从聚簇索引获取数据比非聚簇索引更快 聚簇索引对于主键的排序查找和范围查找速度很是快

    2K31

    什么MySQL不推荐使用uuid或者雪花id作为主键

    p=5090 前言 在mysql设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment...,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?...一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机...当达到页面的最大填充因子时候(innodb默认的最大填充因子是页大小的15/16,会留出1/16的空间留作以后的修改): ①下一条记录就会写入新的页,一旦数据按照这种顺序的方式加载,主键页就会近乎于顺序的记录填满...在实际的开发还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。

    3.9K20

    MySQL 核心模块揭秘 | 35 期 | 主键索引等值查询加什么锁?

    本文基于 MySQL 8.0.32 源码,存储引擎为 InnoDB。 正文 1....lock_status | GRANTED lock_data | 10 lock_data = 10, lock_mode = S,REC_NOT_GAP 表示对主键索引...示例 SQL 的 where 条件只包含主键索引字段,主键索引的唯一约束能够保证:只要不删除表 的记录,就不会再有其它 的记录插入到主键索引。...示例 SQL 执行过程,对主键索引 的记录加共享普通记录锁,属于默认情况,不需要其它解释了。 4....总结 可重复读、读已提交两种隔离级别下,对主键索引字段进行等值查询,虽然都对记录加了共享普通记录锁,但是它们的加锁逻辑是不一样的。 这两种隔离级别下,对唯一索引进行等值查询,加锁情况是什么样的呢?

    10010
    领券