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

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

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

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

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

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

    4K30

    MySQL replace into导致id问题

    // MySQL replace into导致id问题 // 今天线上遇到一个问题,挺有意思,这里记录一下希望对大家有所帮助。...某个表中,只有一条记录,发生高可用切换之后,自id值发生了变化,主从id值不一致,导致数据写入报主键冲突错误。...我们知道,在MySQL中,是支持replace语法,当你执行replace into时候,如果该条记录存在,那么replace会删除这条记录,然后重新insert一条新记录。...*/; 可以看到,MySQL将replace into在binlog中保存格式是update语句,那么update语句本质上不会对自增值进行修改,所以就导致了主从表自id不一致,这样虽然看着没有什么问题...,从库id比主库小,当主从发生切换时候,这个问题就比较严重了,有些数据写入时候,就会报错了。

    7.2K20

    关于mysqlid获取和重置

    转载请注明出处:帘卷西风专栏(http://blog.csdn.net/ljxfblog) ---- mysql取自id几种方法 使用max函数:select max(id) from tablename...缺点:获取不是真正id,是表中最大Id,如果有删除数据的话,那么该值和自id相差比较大。如果有连表数据,有可能导致数据错乱。...使用mysql查询函数:SHOW TABLE STATUS; 优点:能够准确查到自id。而且可以在语句后面加上where语句或者like语句来过滤。...---- mysqlid重置 使用truncate:truncate table; 说明:使用truncate会删除表数据释放空间,并且重置字自id,但不会删除表定义。...也不会清空数据,有可能会出现重复key可能,所以此方法也只适用于清空表之后重置自id或者大量删除后修改自id

    11.7K20

    技术分享 | 关于 MySQL ID 事儿

    当我们使用 MySQL 进行数据存储时,一般会为一张表设置一个自主键,当有数据行插入时,该主键字段则会根据步长与偏移量增长(默认每次+1)。...自值并不是保存在表结构信息内,对于不同版本它们有如下区别: 1.1.1 MySQL 8.0版本之前(重启后可能会产生变化): 计数器值存储在内存中,重启后丢弃,下一次将读取最大一个自ID...不一定,业务也不应该过分依赖 MySQL ID 连续性,在以下三种情况下,并不能保证自 ID 连续性: 1.5.1 插入时其他唯一索引冲突 假设已存在数据{1,张三},且张三所属字段设置了唯一主键...3.1 自 ID 输入输出前进行转义 在输出或者获取前对指定字段进行可逆转义操作 优点:实现起来比较简单,无论单体业务或者分布式应用都无需考虑对数据源解析,只需在客户端实现自己转义与解析方法即可...; 缺点:业务入侵较大,且需要前后端各个合作方确认统一标准;如果转义方法有调整,变更影响面也会很大;字符串长度会随ID长度而变化,使用空位填充也会特别明显; 3.2 Snowflake 雪花算法: 优点

    3.7K10

    MySQL表自id溢出故障复盘

    问题: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.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达到上限后,再申请时它值就不会改变,进而导致继续插入数据时报主键冲突错误

    3.2K10

    线上MySQLid用尽怎么办?

    作者:废柴程序员 链接:https://www.jianshu.com/p/a6bc14005b52 MySQLid都定义了初始值,然后不断加步长。...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达到上限后,再申请时它值就不会改变

    2.1K20

    如果MySQL ID 用完了,怎么办?

    id 说到自id,相信你第一反应一定是在设计表结构时候自定义一个自id字段,那么就有一个问题啦,在插入数据时有可能唯一主键冲、sql事务回滚、批量插入时候,批量申请自增值等原因导致自id...它在 MySQL 中是用来对应事务MySQL 内部维护了一个全局变量 global_query_id,每次执行语句时候将它赋值给 Query_id,然后给这个变量加 1。...InnoDB 数据可见性核心思想是:每一行数据都记录了更新它 trx_id,当一个事务读到一行数据时候,判断这个数据是否可见方法,就是通过事务一致性视图与这行数据 trx_id 做对比。...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种自 id。...结果跟row_id一样,就会覆盖原有记录了。 上面介绍了几种MySQL自身一些自id,其实,实际运用中,我们也可能会选择外部主键,然后持久化到数据库,以此来代替数据库自身id

    1.2K20

    如果MySQL ID 用完了,该怎么办?

    如果你用过或了解过MySQL,那你一定知道自主键了。每个自id都是定义了初始值,然后按照指定步长增长(默认步长是1)。...自id 说到自id,相信你第一反应一定是在设计表结构时候自定义一个自id字段,那么就有一个问题啦,在插入数据时有可能唯一主键冲、sql事务回滚、批量插入时候,批量申请自增值等原因导致自id...InnoDB 数据可见性核心思想是:每一行数据都记录了更新它 trx_id,当一个事务读到一行数据时候,判断这个数据是否可见方法,就是通过事务一致性视图与这行数据 trx_id 做对比。...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种自 id。...上面介绍了几种MySQL自身一些自id,其实,实际运用中,我们也可能会选择外部主键,然后持久化到数据库,以此来代替数据库自身id。下面来说说吧。

    78920

    【建议收藏】MySQLid超出上限问题

    mysql中有多种自id,除了我们日常开发中经常使用主键外,还有一些其他id,主要是mysql内部为了辅助其正常运行而使用。 这些自id,都是定义了初始值,然后不停累加步长。...对于每一种自id,在mysql中都会定义其数据类型,以及这个数据类型所占用字节长度,也就是说每个自id,都是有上限,只不过上限大小不尽相同而已,既然自id有上限,那么就有可能被用完,那问题来了...在mysql中,对于不同id值达到上限后,对应处理方式是不同。下面我们就对mysql中,几个比较重要id进行分析一下。...'主键', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB; 一、自定义自主键 自定义自主键,是工作中最经常使用到一种自id,对于自主键一些细节问题可以参考你真的懂自主键...为了能够让id字段快速达到这个上限,这里有两种方法: 1.直接插入一个id=4294967295 数据行。

    4.6K10

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

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

    2.2K10

    面试官问:MySQL ID 用完了,怎么办?

    如果你用过或了解过MySQL,那你一定知道自主键了。每个自id都是定义了初始值,然后按照指定步长增长(默认步长是1)。...自id 说到自id,相信你第一反应一定是在设计表结构时候自定义一个自id字段,那么就有一个问题啦,在插入数据时有可能唯一主键冲、sql事务回滚、批量插入时候,批量申请自增值等原因导致自id...InnoDB 数据可见性核心思想是:每一行数据都记录了更新它 trx_id,当一个事务读到一行数据时候,判断这个数据是否可见方法,就是通过事务一致性视图与这行数据 trx_id 做对比。...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种自 id。...上面介绍了几种MySQL自身一些自id,其实,实际运用中,我们也可能会选择外部主键,然后持久化到数据库,以此来代替数据库自身id。下面来说说吧。

    87310

    面试官问:MySQLID用完了,怎么办?

    首先,创建一个最简单表,只包含一个自id,并插入一条数据。...我们可以算下最大当前声明ID最大是多少,由于这里定义是 intunsigned,所以最大可以达到232幂次方 - 1 = 4294967295 这里有个小技巧,可以在创建表时候,直接声明AUTO_INCREMENT...Duplicate entry '4294967295' for key 'PRIMARY' 0.00054 sec 说明,当再次插入时,使用ID还是 4294967295,报主键冲突错误...如果是这种情况,InnoDB会自动帮你创建一个不可见、长度为6字节row_id,而且InnoDB 维护了一个全局 dictsys.row_id,所以未定义主键表都共享该row_id,每次插入一条数据...row_id一直涨,一直涨,直到248幂次-1时,这个时候再+1,row_id低48位都为0,结果在插入新一行数据时,拿到row_id就为0,存在主键冲突可能性。

    1.7K30

    面试官问:MySQL ID 用完了,怎么办?

    如果你用过或了解过MySQL,那你一定知道自主键了。每个自id都是定义了初始值,然后按照指定步长增长(默认步长是1)。...自id 说到自id,相信你第一反应一定是在设计表结构时候自定义一个自id字段,那么就有一个问题啦,在插入数据时有可能唯一主键冲、sql事务回滚、批量插入时候,批量申请自增值等原因导致自id...InnoDB 数据可见性核心思想是:每一行数据都记录了更新它 trx_id,当一个事务读到一行数据时候,判断这个数据是否可见方法,就是通过事务一致性视图与这行数据 trx_id 做对比。...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种自 id。...上面介绍了几种MySQL自身一些自id,其实,实际运用中,我们也可能会选择外部主键,然后持久化到数据库,以此来代替数据库自身id。下面来说说吧。

    93950
    领券