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

mysql 主键语句_MySQL 主键

主键有两个性质需要考虑: 单调性 每次插入一条数据,其 ID 都是比上一条插入的数据的 ID 大,就算上一条数据被删除。...主键的单调性 为何会有单调性的问题? 这主要跟主键最大值的获取方式,以及存放位置有关系。 如果最大值是通过计算获取的,并且在某些情况下需要重新获取时,会因为最新的数据被删除而减小。...主键最大值怎么取的?存放到哪里?...从 MySQL 8.0 开始,主键最大值会在每次修改后写入到 redo log,并且在每个检查点写入引擎私有的系统表。 如果是正常重启,则读取系统表里的值。...其他 如果主动指定 ID 为 0 或者 NULL 插入,则会使用数据库生成的 ID。

10.7K10

分布式ID算法Snowflake

但是数据迁移后我们遇到一个问题,之前mysql数据库中,我们采用的是id主键,可选用的tidb又对主键不是很友好,所以我们选用了另一种主键生成方式:Snowflake算法。...算法原理 SnowFlake算法是Twitter设计的一个可以在分布式系统中生成唯一的ID的算法,它可以满足每秒上万条消息ID分配的请求,这些消息ID是唯一的且有大致的递增顺序。...SnowFlake算法产生的ID是一个64位的整型,结构如下: 图片 第一位是标识位,一般不使用,接下来的41位为毫秒级时间差(以1970年为起始时间,41位的长度可以使用69年,从1970-01-01...图片 总结 Snowflake是分布式系统中,用来生成全局唯一ID的一种常用算法。和UUID相比,Snowflake具有简单、占用空间小、有序等优点。...但Snowflake算法也有它的弊端,时钟回拨、时钟错乱问题,将是我们程序中需要考虑的问题。

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

mysql主键策略_MySQL 主键机制

主键:特指在增列上定义的主键。 主键的优点是让主键索引保持递增顺序的插入,避免页分裂,索引更加紧凑。 1. 增值保存在哪? 不同的存储引擎保存增值的策略不一样; a....锁的优化 a. 锁不是事务锁,在每次申请完就释放;在5.0版本会在语句执行完才释放,后续版本无须在语句执行完才释放;支持批量申请; b....而对于批量插入数据的语句(select … insert,replace … select 和 load data 语句),MySQL 有一个批量申请 id 的策略(注:该策略是导致 id 不连续的第三种原因...:语句执行过程中,第一次申请 id,会分配 1 个;1 个用完以后,这个语句第二次申请 id,会分配 2 个;2 个用完以后,还是这个语句,第三次申请 id,会分配 4 个;依此类推,同一个语句去申请...id,每次申请到的 id 个数都是上一次的两倍。

9.4K50

Twitter的分布式ID算法-->雪花算法(snowflake)

(转换成字符串后长度最多19) snowflake生成的ID整体上按照时间排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。...优点: 整体上按照时间排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。...毫秒数在高位,序列在低位,整个ID都是趋势递增的。 不依赖数据库等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的。 可以根据自身业务特性分配bit位,非常灵活。... * SnowFlake的优点是,整体上按照时间排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID.../** 数据标识id所占的位数 */ private final long datacenterIdBits = 5L; /** 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数

91450

浅谈MySQL

原文:cnblogs.com/billyxp/archive/2013/01/22/2871737.html 一、增配置 通过如下建表语句就可以完成的配置 CREATE TABLE `test_inc...如果存在字段,MySQL会维护一个锁,和锁相关的一个参数为(5.1.22版本之后加入) innodb_autoinc_lock_mode:可以设定3个值,0,1,2 0:traditonal...六、的过程 第一种,插入空值的时候 当innodb_autoinc_lock_mode=0时 1、申请AUTO_INC锁 2、得到当前的AUTO_INCREMENT值n,并加1 3、执行插入操作...第二种,插入已经有值的 1、插入第一条数据 2、如果失败流程结束 3、如果成功,申请AUTO_INC锁 4、调用set_max函数,修改AUTO_INCREMENT 5、语句结束,释放AUTO_INC...为了保证主库和从库的ID的一致性,binlog中会有set insert_ID命令,标明这个load语句的第一行的ID值,这样在表锁的情况下,就可以保证一致性了。

5K30

39 | 主键不连续

新的增值生成算法是:从 auto_increment_offset 开始,以 auto_increment_increment 为步长,持续叠加,直到找到第一个大于 X 的值,作为新的增值。...如果允许事务 A 把 id 回退,也就是把表 t 的当前增值改回 2,那么就会出现这样的情况:表里面已经有 id=3 的行,而当前的 id 值是 2。...锁的优化 id 锁并不是一个事务锁,而是每次申请完就马上释放,以便允许别的事务再申请 在 MySQL 5.0 版本的时候,锁的范围是语句级别。...批量申请 id 策略 语句执行过程中,第一次申请 id,会分配 1 个; 1 个用完以后,这个语句第二次申请 id,会分配 2 个; 2 个用完以后,还是这个语句,第三次申请 id,会分配...4 个; 依此类推,同一个语句去申请 id,每次申请到的 id 个数都是上一次的两倍。

4.8K10

深入剖析 MySQL

之前的文章把 InnoDB 中的所有的锁都介绍了一下,包括意向锁、记录锁...锁巴拉巴拉的。但是后面我自己回过头去看的时候发现,对锁的介绍居然才短短的一段。...其实锁(AUTO-INC Locks)这块还是有很多值得讨论的细节,例如在并发的场景下,InnoDB 是如何保证该值正确的进行的,本章就专门来简单讨论一下 InnoDB 中的锁。...什么是锁 之前我们提到过,锁是一种比较特殊的表级锁。...行为与限制 其实上面说的那种阻塞情况只是锁行为的其中一种,可以理解为锁就是一个接口,其具体的实现有多种。...如果你对锁有足够的了解,那么这个问题将会迎刃而解。

3.2K40

Hive如何实现序列

在利用数据仓库进行数据处理时,通常有这样一个业务场景,为一个Hive表新增一列字段(比如事实表和维度表之间的"代理主键")。...虽然Hive不像RDBMS如mysql一样本身提供主键的功能,但它本身可以通过函数来实现序列功能:利用row_number()窗口函数或者使用UDFRowSequence。...示例:table_src是我们经过业务需求处理的到的中间表数据,现在我们需要为table_src新增一列序列字段auto_increment_id,并将最终数据保存到table_dest中。...但是,需要注意二者的区别: row_number函数是对整个数据集做处理,序列在当次排序中是连续的唯一的。...可以考虑将UDFRowSequence扩展到一个第三方存储系统中,进行序号逻辑管理,来最终实现全局的连续唯一序号。

4.6K40
领券