美文网首页
mysql 自增id作为主键 策略

mysql 自增id作为主键 策略

作者: 不怕天黑_0819 | 来源:发表于2020-11-26 20:26 被阅读0次

首先需要明确,自增id用完之后插入数据会报主键冲突。
一般情况我们使用bigint unsigned 来设置主键id,具体语句如下:

CREATE TABLE `t1` (  `id` bigint(10) unsigned NOT NULL AUTO_INCREMENT,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

如果不显示申明主键会怎么样

如果是这种情况,InnoDB 会自动帮你创建一个不可见的、长度为 6 字节的 row_id,而且 InnoDB 维护了一个全局的 dictsys.row_id,所以未定义主键的表都共享该 row_id,每次插入一条数据,都把全局 row_id 当成主键 id,然后全局 row_id 加 1
该全局 row_id 在代码实现上使用的是 bigint unsigned 类型,但实际上只给 row_id 留了 6 字节,这种设计就会存在一个问题:如果全局 row_id 一直涨,一直涨,直到 2 的 48 幂次 - 1 时,这个时候再 + 1,row_id 的低 48 位都为 0,结果在插入新一行数据时,拿到的 row_id 就为 0,存在主键冲突的可能性。所以还是需要我们自己指定主键。

相关文章

  • mysql 自增id作为主键 策略

    首先需要明确,自增id用完之后插入数据会报主键冲突。一般情况我们使用bigint unsigned 来设置主键id...

  • 全局唯一ID

    生成全局唯一ID 通过MySQL的自增主键,作为唯一id; 通过内存中变量AtomicLong的自增来得到唯一id...

  • sql练习题

    1. mysql查询 两张表:user用户表:id (主键,自增),namebuy 购买记录表: id (主键,自...

  • 2019-04-07记录一个小事故

    MySQL的数据库自增主键id不能作为业务范围查询依据,id的值是根据表中AUTOINCREMENT的值进行自增的...

  • MySQL之主键

    引用 数据表的主键选择 设计套路:Mysql主键的选择 数据库的唯一标示符(ID)的选择 MySQL 使用自增ID...

  • MySQL的自增主键用完了会发生什么?

    首先MySQL的自增主键ID是有限制的,它的最大值是231-1=4294967295。 当自增主键达到最大,再次插...

  • 创建数据表最简单的模板

    //创建数据表 主键为ID 且自增 echo "开始"; $con = mysql_connect("localh...

  • mysql操作数据库

    MYSQL主键自增用法

  • 分布式ID生成器

    1. 背景 最近项目需要有分布式ID生成器这样的组件,利用生成的ID作为表的主键而不是mysql的自增ID查阅了一...

  • EFCore 获取主表自增Id并多表同时插入

    业务需求:主表:采购表 主键Id为自增Int. 子表:采购明细 药品编码+ 主表自增Id 双主键。 业务逻辑:添加...

网友评论

      本文标题:mysql 自增id作为主键 策略

      本文链接:https://www.haomeiwen.com/subject/wfqwsktx.html