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

mysql id长度

基础概念

MySQL中的ID通常用于唯一标识表中的每一行记录。ID的长度取决于具体的数据类型和业务需求。常见的ID类型包括整数类型(如INT)和字符串类型(如VARCHAR)。

相关优势

  1. 唯一性:ID的主要优势是能够唯一标识每一行记录,便于数据的查询和管理。
  2. 索引优化:整数类型的ID通常会被自动创建索引,提高查询效率。
  3. 存储空间:整数类型的ID占用的存储空间较小,适合大规模数据存储。

类型

  1. 整数类型
    • TINYINT:占用1个字节,范围是-128到127或0到255。
    • SMALLINT:占用2个字节,范围是-32768到32767或0到65535。
    • MEDIUMINT:占用3个字节,范围是-8388608到8388607或0到16777215。
    • INT:占用4个字节,范围是-2147483648到2147483647或0到4294967295。
    • BIGINT:占用8个字节,范围是-9223372036854775808到9223372036854775807或0到18446744073709551615。
  • 字符串类型
    • VARCHAR:可变长度的字符串,长度范围是1到65535个字符。
    • CHAR:固定长度的字符串,长度范围是1到255个字符。

应用场景

  1. 自增ID:通常使用INT类型,并设置为自增(AUTO_INCREMENT),适用于大多数业务场景。
  2. UUID:使用VARCHAR类型存储32位的UUID,适用于分布式系统,确保全局唯一性。
  3. 复合ID:在某些复杂场景下,可能需要使用多个字段组合成一个唯一的ID。

常见问题及解决方法

问题:为什么选择INT类型作为ID?

原因

  • INT类型占用的存储空间较小,查询效率高。
  • 自增特性方便插入新记录。
  • 整数类型在数据库中更容易进行索引和排序。

解决方法

  • 如果业务场景不需要全局唯一性,且数据量较大,建议使用INT类型并设置为自增。
  • 示例代码:
  • 示例代码:

问题:为什么选择VARCHAR类型作为ID?

原因

  • 需要全局唯一性,如UUID。
  • ID包含特殊字符或较长字符串。

解决方法

  • 使用VARCHAR类型存储UUID或其他长字符串。
  • 示例代码:
  • 示例代码:

参考链接

希望以上信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Mysql覆盖索引_mysql索引长度限制

只扫描索引而无需回表的优点: 1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。...,但不是整个查询涉及的字段,mysql5.5和之前的版本也会回表获取数据行,尽管并不需要这一行且最终会被过滤掉。...2.mysql不能在索引中执行LIke操作。mysql能在索引中做最左前缀匹配的like比较,但是如果是通配符开头的like查询,存储引擎就无法做比较匹配。...这种情况下mysql只能提取数据行的值而不是索引值来做比较 优化后SQL:添加索引(artist,title,prod_id),使用了延迟关联(延迟了对列的访问) 说明:在查询的第一阶段可以使用覆盖索引...,在from子句中的子查询找到匹配的prod_id,然后根据prod_id值在外层查询匹配获取需要的所有值。

7.9K30
  • mysql前缀索引 默认长度_如何确定前缀索引的长度?

    uniq_code` (`nick_name`,`account`,`city`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’Test’; 复制代码 原因 在MySQL5.6...在MySQL5.7里默认 innodb_large_prefix=1 解除了767bytes长度限制,但是单列索引长度最大还是不能超过3072bytes。...https://dev.mysql.com/doc/refman/8.0/en/create-index.html varchar(n)占用几个字节跟字符集有关系: 字符类型若为gbk,每个字符占用2个字节...下面这个例子就是在建立customer_id,staff_id的联合索引时进行判断,最终选择(customer_id,staff_id)这样的组合。...的选择性更高,所以应该选择 customer_id 作为联合索引的第一列 SELECT COUNT(DISTINCT staff_id)/COUNT(*) as staff_id_selectivity

    3.6K20

    mysql中int长度的意义

    提问: mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同。如果不同,分别是多大?...真实情况: 我们建立下面这张表: CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `i1` int...) unsigned zerofill DEFAULT NULL, `i2` int(6) unsigned zerofill DEFAULT NULL, PRIMARY KEY (`id...查下手册,解释是这样的: MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。...也就是说,int的长度并不影响数据的存储精度,长度只和显示有关,为了让大家看的更清楚,我们在上面例子的建表语句中,使用了zerofill。

    3.9K10

    MySQL中索引的长度的限制

    参考: http://dinglin.iteye.com/blog/1681332 单列索引的长度的限制     (5.6里面默认不能超过767bytes,5.7不超过3072bytes):     起因是...255×4>767, 于是增加了一个参数叫做 innodb_large_prefix     # 256的由来: 只是因为char最大是255,所以以前的程序员以为一个长度为255的index就够用了,...--- by 阿里-丁奇 在MySQL5.6里默认 innodb_large_prefix=0 限制单列索引长度不能超过767bytes    官网文档:https://dev.mysql.com/doc.../refman/5.6/en/innodb-parameters.html#sysvar_innodb_large_prefix 注意: 在MySQL5.6里面,设置了innodb_large_prefix...在MySQL5.7里默认 innodb_large_prefix=1 解除了767bytes长度限制,但是单列索引长度最大还是不能超过3072bytes 联合索引的长度的限制 (不能超过3072bytes

    5.5K30

    技术分享 | MySQL 索引长度限制的案例

    前两天同事提了一个问题,MySQL 5.7 中给某张表字段增加一个单键值索引,提示了如下错误, 一些背景信息: 表设置的字符集,utf8mb4 。 表的存储引擎,MyISAM 。...我们知道,MySQL 和 Oracle 在索引上最大的一个区别,就是索引存在长度的限制。如果是超长键值,可以支持创建前缀的索引,顾名思义,取这个字段的前多少个字符/字节作为索引的键值。...MySQL 官方手册索引的章节提到了,前缀索引长度限制是和引擎相关的,如果用的是 InnoDB ,前缀上限是 767 字节,当启用 innodb_large_prefix 时,上限可以达到 3072 字节...utf8mb4 是 MySQL 5.5.3 之后增加的编码,mb4 就是 most bytes 4 的意思,专门用来兼容四字节的 unicode ,utf8mb4 是 utf8 的超集。...我们可以测下 MyISAM ,utf8mb4 编码表 test1 ,250长度的字段 c1 ,251长度的字段c2 , CREATE TABLE test1 (c1 varchar(250), c2

    4K30

    详解 mysql int 类型的长度值问题

    秉着好奇心, 打开了 google ~ 引入大神的解答. mysql 在建表的时候 int 类型后的长度代表什么? 是该列允许存储值的最大宽度吗?...所以我在网上查阅了一些资料, 也仔细的看了 mysql 手册关于 int data type 的说法. 以下是每个整数类型的存储和范围 (来自 mysql 手册) ?...CREATE TABLE `test` ( `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `number` INT( 5 ) NOT NULL...mysql 我们看到现在我的 number 字段, 长度 (M)=5, 属性 =UNSIGNED ZEROFILL(无符号, 用 0 来填充位数), 设置这个属性后我往表时插入数据, 系统会自动把 number...mysql 手册上还有这么一句话 "当 mysql 为某些复杂的联结 (join) 生成临时表时,你可能会遇到问题,因为在这种情况下,mysql 信任地认为所有的值均适合原始的列宽度".

    3.6K20
    领券