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

MySQL自增主键为什么连续

自增主键可以让主键索引尽量的保持递增顺序插入,避免页分裂,索引更加紧凑。 自增主键保存在何处?...不同的引擎对于自增值的保存策略不同: MyISAM引擎的自增值保存在数据文件中 InnoDB引擎的自增值保存在内存里,但是在MySQL8.0以后,该自增值才可以被持久化:MySQL5.7以前,自增值没有持久化每次重启后第一次打开表的时候...auto_increment_offset(默认值是1)开始,以auto_increment_increment(默认值是1)为步长,持续叠加,直到找到第一个大于X的值,作为新的自增值 唯一键冲突导致自增主键连续...事务回滚导致自增主键连续 set autocommit=0; begin; insert into t values(null, 2, 2); rollback; show create table...批量插入导致自增值连续 自增值锁不是一个事务锁,每次申请完就释放,方便其他事务获取自增值。

8.3K20

Excel排序排序

文章背景:Excel二维表中记录着多行多列的数据,有时需要按行或排序,使数据更加清晰、易读。下面分别对排序排序进行介绍。...排序 视频演示:http://mpvideo.qpic.cn/0bf2kyaamaaazaab47jfqnpvavwdazlaabqa.f10002.mp4?...对于商品编号一列,存在文本型数字,因此,排序时会出现排序提醒。 将任意类似数字的内容排序 所有类似数字的文本会以数字大小排序。...排序 视频演示:http://mpvideo.qpic.cn/0b78lyaaaaaapuabszbfqjpvaxwdabpaaaaa.f10002.mp4? 本例中,行一代表各个月份。...在进行排序时,数据区域不包括A列。在Excel中,没有行标题的概念。因此,排序前如果框中A列的话,A列也将参与排列,会排到12月份之后,而这不是我们想要的结果。

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

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

前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么建议采用...,分别表示自动增长的主键,uuid作为主键,随机key作为主键,其它我们完全保持不变....根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机key其实是指用雪花算法算出来的前后连续不重复无规律的id:一串18位长度的...结论:使用innodb应该尽可能的主键的自增顺序插入,并且尽可能使用单调的增加的聚簇键的值来插入新行 2.3.使用自增id的缺点 那么使用自增的id就完全没有坏处了吗?...在实际的开发中还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。

4.6K30

Mysql资料 主键

表中的任何列都可以作为主键,只要它满足以下条件: 1、任何两行都不具有相同的主键值 2、每个行都必须具有一个主键值(主键列不允许NULL值) 除MySQL强制实施的规则外,应该坚持的几个普遍认为的最好习惯为...: 1、更新主键列的值 2、不重用主键列的值 3、不在主键列中使用可能会更改的值(例如,如果使用一个名字作为主键以标识某个供应商,应该供应商合并和更改其名字时,必须更改这个主键) 总之:不应该使用一个具有意义的...这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15...在使用InnoDB存储引擎时,如果没有特别的需要,请永远使用一个与业务无关的自增字段作为主键。 InnoDB 存储引擎采用了聚集(clustered)的方式,因此每张表的存储都是主键的顺序进行存放。...如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并一次作为主键mysql 在频繁的更新、删除操作,会产生碎片。而含碎片比较大的表,查询效率会降低。

3.7K20

MYSQL用法(十六) MySQL指定字段自定义列表排序

一、 ORDER BY 排序 要求:按照字段IS_NEW_PROJ的降序、字段LOAN_APR的降序、字段GMT_BUY_START的升序排序 sql语句如下: SELECT b.PROJECT_ID...二、 ORDER BY FIELD排序(自定义排序规则) 要求:按照字段PROJECT_STATUS指定的顺序排序 sql语句如下: SELECT b.PROJECT_ID AS project_id...三、 ORDER BY FIELD排序升级(多条件组合排序) 要求:按照字段IS_NEW_PROJ降序、字段PROJECT_STATUS指定的顺序排、字段LOAN_APR降序、字段GMT_BUY_START...四、 ORDER BY 排序终极版(多条件组合排序+自定义排序) 要求:按照字段IS_NEW_PROJ降序、字段PROJECT_STATUS指定的顺序排序、字段GMT_BUY_START降序、字段PROJECT_STATUS...指定的顺序排序 sql语句如下: SELECT b.PROJECT_ID AS project_id, b.PROJECT_TITLE AS project_title, b.PROJECT_STATUS

2.4K30

mapkey和value排序

看一个题: 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都先录入排列在前的规则处理。...2、可以递增排序和递减排序 3、保证排序的稳定性 golang mapkey排序 //golang的map不保证有序性,所以key排序需要取出key,对key排序,再遍历输出value package...for _, k := range keys { fmt.Println("Key:", k, "Value:", m[k]) } } golang mapvalue...Name: "EEE", Age: 11, }, } sort.Stable(a) fmt.Println(a) } C++value...排序、递增和递减、排序的稳定性 /看一下本题的C++解法,C++ sort的第三个参数用来定义排序方法,即按key还是value排序,递增还是递减排序等,stable_sort用来保证排序的稳定性,主要思路与

3.1K80

mapkey和value排序

看一个题: 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都先录入排列在前的规则处理。...2、可以递增排序和递减排序 3、保证排序的稳定性 golang mapkey排序 //golang的map不保证有序性,所以key排序需要取出key,对key排序,再遍历输出value package...for _, k := range keys { fmt.Println("Key:", k, "Value:", m[k]) } } golang mapvalue...Name: "EEE", Age: 11, }, } sort.Stable(a) fmt.Println(a) } C++value...排序、递增和递减、排序的稳定性 /看一下本题的C++解法,C++ sort的第三个参数用来定义排序方法,即按key还是value排序,递增还是递减排序等,stable_sort用来保证排序的稳定性,主要思路与

4.6K30

mysql主键自增策略_MySQL 自增主键机制

自增主键:特指在自增列上定义的主键。 自增主键的优点是让主键索引保持递增顺序的插入,避免页分裂,索引更加紧凑。 1. 自增值保存在哪? 不同的存储引擎保存自增值的策略不一样; a....Innodb引擎,mysql5.7之前,自增值保存在内存中,而且不会持久化自增值。...每次重启后第一次打开表,都会去查找自增值的最大值max(id), 并设置表当前自增值为max(id) + 1; mysql8.0, 自增值变更记录在了redo log中,重启时依靠redo log恢复重启之前的值...为了减少自增id锁带来的性能影响,mysql不会修改回去之前的自增值; 4. 自增锁的优化 a....而对于批量插入数据的语句(select … insert,replace … select 和 load data 语句),MySQL 有一个批量申请自增 id 的策略(注:该策略是导致自增 id 连续的第三种原因

9.4K50

MySQL主键

本文标识 : MQ0021 本文编辑 : 长安月下赏美人儿 编程工具 : MySQL、DBeaver 阅读时长 : 4分钟 前言 小编在查询相关的学习资料的同时,偶尔会遇到关于主键的信息,也是一直没有很清晰的认知...定义:PRIMARY KEY 注意:主键之于数据表相当于口红之于女人,可以不用,但最好还是有 主键选择的遵循原则 任何两行都不具有相同的主键值 每行必须具有一个主键值,且不允许设置为NULL 主键应当是对用户没有意义的...永远不要更新主键主键除了唯一标识一行之外再无其他意义 主键不应包含动态变化的数据,如时间戳、创建/修改时间列等 主键应当由计算机自动生成 主键的作用 保证实体的完整性 加快数据库的操作速度 在表中添加新记录时...,DBMS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复 DBMS自动主键值的顺序显示表中的记录 如果没有定义主键,则按输入记录的顺序显示表中的记录 主键的选择 编号为主键 方法:选择唯一字段...设置主键的方法 在创建数据表的同时决定是否有主键 #带主键 CREATE TABLE test1( id INT NOT NULL PRIMARY KEY, name CHAR(20) ); #带复合主键

3.7K10

hastable排序

最近做了一个项目,需要对一个2维数组的值进行排序然后再取出对应的Key值。开始是用HashTable做的,不过HashTable中的排序只是对Key进行排序,如果想对值进行排序得用其它办法。...我们现在要实现的是将Value从小到大排序,然后再取出排序过后的Key的值,请看代码: 代码 //先定义两个一维数组,分别用来存储Key和Value string[] keyArray=new string...//注:有关CopyTo的用法请参考相关帮助文档 ht.Keys.CopyTo(keyArray,0); ht.Values.CopyTo(valueArray,0); //下面就是对Value进行排序...,当然需要按排序结果将Keys的值也作对应的排列 //Sort默认是升序排序,如果想用降序排序请在Sort排序后使用Array.Reverse()进行反向排序 Array.Sort(valueArray...,keyArray); 上面的代码已经将Value进行了升序排序,并且Key也作了相应的排列。

1.3K30

为什么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作为主键,随机...根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机key其实是指用雪花算法算出来的前后连续不重复无规律的id:一串18位长度的...结论:使用innodb应该尽可能的主键的自增顺序插入,并且尽可能使用单调的增加的聚簇键的值来插入新行。 2.3.使用自增id的缺点 那么使用自增的id就完全没有坏处了吗?

3.8K20
领券