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

关于mysqlid获取和重置

转载请注明出处:帘卷西风专栏(http://blog.csdn.net/ljxfblog) ---- mysql获取自增id几种方法 使用max函数:select max(id) from tablename...缺点:获取不是真正id,是中最大Id,如果有删除数据的话,那么该值和id相差比较大。如果有连数据,有可能导致数据错乱。...使用LAST_INSERT_ID函数:select LAST_INSERT_ID() 优点:获取是真正id。 缺点:该函数是与table无关,永远保留最新插入增列id。...缺点:该语句返回是一个记录集,不能单独返回增值。所以需要额外操作来获取。 使用自定义查询方法:mysql表相关信息是放在information_schema表里。...---- mysqlid重置 使用truncate:truncate table; 说明:使用truncate会删除数据释放空间,并且重置字id,但不会删除定义。

11.4K20

MySQLid溢出故障复盘

问题:MySQL某个id溢出导致某业务block 背景:     tokudb引擎一个大tb1,存放业务上机审日志,每天有大量写入, 并且由于历史原因,这张是int signed 类型...只需要下面几步: use logdb; select max(id) from tb1;   -- 记录下当前最大id为 xxxx create table tb2 LIKE tb1;   -- 创建影子表...alter table tb2 modify column id  bigint unsigned not null auto_increment ;   -- 修改新为bigint unsigned...alter table tb2 auto_increment=xxxx+1;  -- 改大新增主键起始值 rename table tb1 to tb_archive , tb2 to tb1;...后续优化措施:     增加对id监控, 见这里 https://blog.51cto.com/lee90/2427912     整理些生产上可能遇到突发问题,并正对性制定相关应急预案

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

Mybatis获取增长主键id

,所以完全可以获取到用户userId,但是现在是要在创建时候就分配,又因为我们userId是在数据库中设置自动增长,所以前端传给我们user对象里面是不包含userId....所以对于如何取得增长Id就比较麻烦.查阅资料后发现,还是有办法解决.而且有两种方法,这里都分享给大家,并且我自己也都测试了,的确可用. 2.解决方案 2.1方案一 这段代码加在你insert语句中...,after,这两个值分别表示一个是在执行插入操作之前再取出主键id,一个是执行插入操作之后再取出主键Id.前者使用与自己定义增长规则id,后者就是用与我们情况即增长id 小栗子: <insert...说明的确是读取到了增长userId,数据也成功插入了. 2.2方案二 <insert id="insertSelective" parameterType="请求对象" useGeneratedKeys...user数据成功插入: ? 再看看关联中数据插入了没有: ? 也成功插入了,显然两者都能读取到增长userId

3.3K20

如何在MySQL现有中添加ID

当在MySQL数据库中,ID是一种常见主键类型,它为每一行分配唯一标识符。在某些情况下,我们可能需要在现有的MySQL中添加ID,以便更好地管理和索引数据。...在本文中,我们将讨论如何在MySQL现有中添加ID,并介绍相关步骤和案例。图片创建新ID列添加ID列是在现有中添加ID一种常见方法。...案例研究:在现有中添加ID假设我们有一个名为customers,现在我们想要在该中添加ID列以便更好地管理数据。...数据一致性:添加ID列可能需要对现有数据进行更新操作,确保在进行更新之前备份数据,并小心处理可能出现冲突或错误。结论在本文中,我们讨论了如何在MySQL现有中添加ID。...通过合理地添加ID列,我们可以更好地管理和索引MySQL数据,提高数据查询效率和一致性。请记住,在进行任何操作之前,请备份数据并谨慎处理。

88120

MySQL 约束与增长

# MySQL 约束与增长 mysql约束 基本介绍 primary key(主键)-基本使用 not null和unique(唯一) foreign key(外键) check 商店售货系统设计案例...增长 增长基本介绍 增长使用细节 # mysql约束 # 基本介绍 约束用于确保数据库数据满足特定商业规则。...) REFERENCES goods_(goods_id)); DESC customer DESC goods_ DESC purchase # 增长 # 增长基本介绍 # 增长使用细节...一般来说增长是和primary key配合使用 增长也可以单独使用[但是需要配合一个unique] 增长修饰字段为整数型(虽然小数也可以但是非常非常少这样使用) 增长默认从1开始,你也可以通过如下命令修改...altertable名auto increment=新开始值; 如果你添加数据时,给增长字段(列)指定有值,则以指定值为准,如果指定了增长,一般来说,就按照自增长规则来添加数据 -- 演示增长使用

3.1K30

高并发下获取mysql增主键id解决方案

方案一: 跟我来: 1、开一个存储过程(不为啥,最近喜欢) 2、开一个事务(要上锁了) 3、某张中有某行无关数据,或者就直接再你要用这张表里吧,省跳来跳去。...4、给那行数据上行锁 5、插入增数据行 6、获取自增数据行,max足矣,这个操作时间复杂度是 O(1) 7、提交事务 这个方案我试了,但是在C++操作MySQL时我不知道要怎么拿第二个结果集...像注册,这种需要自动生成账号类场景用增主键,因为增主键我也不是很喜欢,主键还是要有自己意义。...不过这类业务,如果由用户自己输入账号,亦或是系统自己随机生成,都没有增来快,毕竟林子大了,就容易主键冲突。...网上也有不少帖子写了一大堆解决方案,也讲了存储过程,但是很少看到有解释为什么要存储过程。 上面那个解决方案一,精髓就在第四步。

2.1K10

MySQL增长属性中

01 MySQL增长属性中锁 我们在设计结构时候,经常会对某一列设置增长值,它作用是可以帮助我们自动递增某一列值,增长属性经常被设置在主键列上,原因是主键必须具有唯一性,而自动增长可以避免重复...关于增长属性,这里我多唠叨一句,试想一个这个场景,如果一个主键现在已经增长到8了,也就是id=8,此时我们删除这条记录,那么再次插入值时候,这个值会是几???...在innodb存储引擎中,针对每个增长字段都有一个增长计数器,在对还有增长进行插入操作时候,这个计数器会被初始化,在mysql中,我们可以执行下面的语句来得到这个计数器的当前值: select...max(增长列) from table; 当我们进行插入操作时候,该操作会根据这个增长计数器值+1赋予增长列,这个操作我们称之为auto-inc Locking,也就是增长锁,...MySQL5.1.22版本对这种锁进行了升级,提出了一个参数innodb_autoinc_lock_mode参数来控制增长模式,这个参数默认值是1,总共可以设置三个值0,1,2 mysql--dba_admin

2.4K30

MySQL列属性之增长

增长通常是跟主键搭配。 新增增长 任何一个字段要做增长必须前提是本身是一个索引(key一栏有值)。 增长字段必须是数字(整型) 一张最多只能有一个增长,和主键一起搭配。...关于相关新建增长表语句: create table my_auto( id int auto_increment comment'自动增长', name varchar(10) not null )...如上图运行结果可知: 1.增长起始为1,且每次加1。 2.增长如果对应字段输入了值,那么增长失效,但是下一次还是能够正确增长,即值加1。...修改自增长 增长如果是涉及到字段改变,则必须先删除增长,后增加,因为一张有且只能有一个增长。 修改当前增长已经存在值:修改只能比当前已有的增长最大值大,不能小,否则不会生效。...可以修改变量实现不同效果:修改是针对整个数据修改,而不是单张(修改是会话级) 语句形式:set auto_increment_increment=5; — 一次修改5 删除增长 增长是字段一个属性

4.6K20

Mysql实现获取自增id插入到其他

现在有这样一个需求,就是我向A中插入一条数据,id。...插入之后,还需要向B中插入一条数据,但是B中需要保存数据中要使用刚刚A增后id, 这个其实是一个比较常见需求,就是两张之间一个关联,如果用程序来执行也是很容易实现。...比如我就在用sql执行之后,获取Aid插入到B中 实现方式如下: insert into A (id,name,code) values (null, "zhagnsan", "zs"); // 注意...Aid要设置为增,给null值即可 set @id = @@IDENTITY; // 使用id变量保存刚刚增生成id insert into B (id,a_id,name) values...(null, @id, "lisi"); // 使用变量获取AId 上面是用自定义变量形式进行保存,如果你只是想查一下是多少,可以直接使用: select @@IDENTITY; 好了,如果对你有帮助

3.9K30

mysql实现获取自增id插入到其他

现在有这样一个需求,就是我向A中插入一条数据,id。...插入之后,还需要向B中插入一条数据,但是B中需要保存数据中要使用刚刚A增后id, 这个其实是一个比较常见需求,就是两张之间一个关联,如果用程序来执行也是很容易实现。...比如我就在用sql执行之后,获取Aid插入到B中 实现方式如下: insert into A (id,name,code) values (null, "zhagnsan", "zs"); // 注意...Aid要设置为增,给null值即可 set @id = @@IDENTITY; // 使用id变量保存刚刚增生成id insert into B (id,a_id,name) values...(null, @id, "lisi"); // 使用变量获取AId 上面是用自定义变量形式进行保存,如果你只是想查一下是多少,可以直接使用: select @@IDENTITY; 好了,如果对你有帮助

3.5K20

MySQL replace into导致id问题

// MySQL replace into导致id问题 // 今天线上遇到一个问题,挺有意思,这里记录一下希望对大家有所帮助。...某个中,只有一条记录,发生高可用切换之后,id值发生了变化,主从id值不一致,导致数据写入报主键冲突错误。...DEFAULT CHARSET=utf8 可以看到,id是主键,age是唯一索引,我们先插入(2,2)和(3,3)两条数据。...*/; 可以看到,MySQL将replace into在binlog中保存格式是update语句,那么update语句本质上不会对增值进行修改,所以就导致了主从id不一致,这样虽然看着没有什么问题...,从库id比主库小,当主从发生切换时候,这个问题就比较严重了,有些数据写入时候,就会报错了。

7K20

MySQL ID几个小问题

下面这几个小问题都是基于 InnoDB 存储引擎。 1. ID最大记录删除后,新插入记录ID是什么 例如当前中有ID为1,2,3三条记录,把3删除,新插入记录ID从哪儿开始?...MySQL 重启后ID从哪儿开始 例如当前中有ID为1,2,3三条记录,把3删除,重启MySQL,新插入记录ID从哪儿开始? 很多人会认为从4开始,实际是从3开始。...重启MySQL。...ID增值 = 当前最大ID + 1 在插入新记录时,就已经计算得出了新ID值 实验 创建 tb2,ID增: create table tb2(id int unsigned auto_increment...删除最大ID值对ID值没有影响,但MySQL重启之后有影响,不会使用之前ID值,而是使用最大ID+1,因为ID值是存在内存中,重启后需要重新计算。 ID用完后就不变了。

7.8K21

MySQL 对已存在数据添加ID 字段

系统环境:Ubuntu 数据库:MySQL5.7 主要是遗留问题,该本来只是用于分析,同事没有添加id,造成后续在处理时,遇到一些问题,权衡之后,决定对表新增一个id字段(中已经存在大量数据...,非业务),为了节省时间,以下是个人解决方法。...后面通过设置数据库ID增,为每个ID生成唯一标识。...其他字段省略 ); 将修改好数据直接再导入到新建数据库(新增ID字段,设置ID增),同时注意导入时设置字符编码格式为UTF8mb4,防止出现中文乱码情况。...至此,对已存在数据库添加ID操作完成。导出,添加行首空字符,再导入MySQL一共花费3个小时左右时间,基本都花费在导出和导入。

3.5K10

技术分享 | 关于 MySQL ID 事儿

当我们使用 MySQL 进行数据存储时,一般会为一张设置一个增主键,当有数据行插入时,该主键字段则会根据步长与偏移量增长(默认每次+1)。...1.1 计数器初始化 当我们对该设置了增主键之后,则会在该上产生一个计数器,用于为增列分配 ID 。...值并不是保存在结构信息内,对于不同版本它们有如下区别: 1.1.1 MySQL 8.0版本之前(重启后可能会产生变化): 计数器值存储在内存中,重启后丢弃,下一次将读取最大一个ID...由于锁粒度减少,多条语句在插入时进行锁竞争,增长值可能不是连续。...该接口通过简单尝试就可以暴露出真实业务用户总数,可以很方便使用爬虫从1开始递增获取数据信息。 那么有的同学说,我既想使用ID 带来好处,也不想承受这种比较常见问题,那该怎么办呢?

3.1K10

MySQL 主键 ID 会用完吗?

MySQL 主键 ID 会用完吗?...首先我们一般创建 MySQL 数据时候,大部分情况下会创建一个增主键ID 字段,可能你建表语句如下: CREATE TABLE IF NOT EXISTS `tb`( `id` INT...可以看到 INT 类型取值范围是 -2147483648 - 4294967295。所以 在 MySQLID 是会用完。那么问题来了,加入他 ID 用完会发生什么事呢?...但是,InnoDB 在设计时,给 row_id只是 6 个字节长度,这样写到数据中时只放了最后 6 个字节,所以 row_id 能写到数据值,就有两个特征: row_id 写入值范围...总结: ID 用完 会报主键冲突、数据插入失败。 不指定主键、默认创建 row_id 会 覆盖原有的数据。

9.5K20

asp.net core 关于增长ID数据保护(IDOR漏洞)

我们一般情况都是通过主键来操作这条记录,那么这么一个功能就涉及到两个接口(查询列表,删除指定用户)。 嗯!...查询列表接口自然是要带着用户对应主键(通过删除接口传入ID),聪明的人应该想到了;此时ID是明文并且主键我们一般都是增长,此时就会出现我们可以通过猜测这个参数进行恶意删除。嗯!...制造这个问题原因不就是因为ID是数字增长吗,我只要让主键无规律不就行了,比如时间戳加随机数,再比如GUID。猜?你慢慢猜去吧。但是这里面涉及到一个小问题,性能和存储空间问题。...(增长主键和GUID查询性能和占用空间比较) 正如三解决方案,我只要让抛到前台主键是无规律并且不可轻松枚举出来好像就可以了.此处是对称加密(百度“对称加密有哪些”)。...url字符串 String key2 = Request.Form[“key2”];//获取表单 上代码放在自定义管道和自定义过滤器里都可以。

95020

线上MySQLid用尽怎么办?

图片 定义增值id 定义增值达到上限后逻辑是:再申请下一个id时,得到值保持不变。...InnoDB系统增row_id 若你创建InnoDB未指定主键,则InnoDB会自动创建一个不可见,6个字节row_id。...InnoDB里,申请到row_id=N后,就将这行数据写入中;若中已经存在row_id=N行,新写入行就会覆盖原有的行。 验证该结论:通过gdb修改系统增row_id。...所以应该在InnoDB中主动创建增主键:当id到达上限后,再插入数据时会报主键冲突错误。 毕竟覆盖数据,就意味着数据丢失,影响数据可靠性;报主键冲突,插入失败,影响可用性。...因为MySQL使用了一个唯一数组 图片 给新线程分配thread_id逻辑: 图片 总结 每种id有各自应用场景,在达到上限后表现也不同: id达到上限后,再申请时它值就不会改变

3.9K20

线上MySQLid用尽怎么办?

MySQLid都定义了初始值,然后不断加步长。虽然自然数没有上限,但定义了表示这个数字节长度,计算机存储就有上限。...那id用完,会怎么样? 定义增值id 定义增值达到上限后逻辑是:再申请下一个id时,得到值保持不变。...InnoDB系统增row_id 若你创建InnoDB未指定主键,则InnoDB会自动创建一个不可见,6个字节row_id。...InnoDB里,申请到row_id=N后,就将这行数据写入中;若中已经存在row_id=N行,新写入行就会覆盖原有的行。 验证该结论:通过gdb修改系统增row_id。...因为MySQL使用了一个唯一数组 给新线程分配thread_id逻辑: 总结 每种id有各自应用场景,在达到上限后表现也不同: id达到上限后,再申请时它值就不会改变

2K20
领券