首页 > 数据库 >mysql获取插入后ID

mysql获取插入后ID

时间:2023-11-09 11:36:12浏览次数:46  
标签:INSERT LAST ID 插入 mysql id select


1. select max(id) from tablename


在MySQL中,使用auto_increment类型的id字段作为表的主键。通常的做法,是通过“select max(id) from tablename”的做法,但是显然这种做法需要考虑并发的情况,需要在事务中对主表以“X锁“,待获得max(id)的值以后,再解锁。 




2.SELECT LAST_INSERT_ID() 函数




LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。



在多用户交替插入数据的情况下max(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update 操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录, LAST_INSERT_ID返回一个列表。


使用select last_insert_id()时要注意,当一次插入多条记录时,只是获得第一次插入的id值,务必注意!



3. select @@IDENTITY;




@@identity 是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。




比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。




4. SHOW TABLE STATUS;




得出的结果里边对应表名记录中有个Auto_increment字段,里边有下一个自增ID的数值就是当前该表的最大自增ID.


标签:INSERT,LAST,ID,插入,mysql,id,select
From: https://blog.51cto.com/u_809530/8274579

相关文章

  • MySQL query_cache
    在服务器级别只提供了querycache,而在存储引擎级别,MyISAM和InnoDB分别引入了keycache和bufferpool什么是querycacheMysql没有shared_pool缓存执行计划,但是提供了querycache缓存sql执行结果和文本,如果在生命周期内完全相同的sql再次运行,则连sql解析都免去了;所谓完全相同,包含......
  • Proxy下的Prepare透传,让GaussDB(for MySQL)更稳固,性能更卓越
     本文分享自华为云社区《Proxy下的Prepare透传,让GaussDB(forMySQL)更稳固,性能更卓越》,作者:GaussDB数据库。1.引言在很多业务场景下,数据库应用程序处理大量相同的SQL语句——只需更改SQL语句中的文字或变量值。例如:使用相同的SQL模板进行WHERE查询,SET 更新和VALUES 插入等操......
  • MySQL常用性能指标
    一些MySQL的常用性能指标,可以对此增加一些自定义指标到数据库的监控里,如zabbix或者prometheus,来更好的检测数据库的状态。MySQSL版本是5.7.19。因为是自己的测试环境,所以截图的一些指标很低,仅为大家展示查看参数的显示情况。mysql>selectversion();+-----------+|version()|......
  • mysql-utilities对比两个库数据一致性
    1.安装mysql-utilities首先yum源安装python,之后根据python版本下载安装mysql-connector-pythonyuminstallpythonpython--versionpython2.6.6下载地址:https://downloads.mysql.com/archives/c-python/rpm-ivhmysql-connector-python-2.1.6-1.el6.x86_64.rpmwhichpython之后......
  • Linux中uuid是什么?作用有哪些?
    在Linux中,uuid代表通用唯一标识符,是一种特定形式的标识符,在大多数实际用途当中可以安全地认为是唯一的。那么Linux中uuid是什么?作用有哪些?我们来看看具体内容介绍。在Linux中,UUID通用唯一标识符,是一种用于唯一标识文件系统或设备的字符串。UUID是一个由32个字符组成的标......
  • MySQL 单表数据最大不要超过多少行?为什么?
    1背景作为在后端圈开车的多年老司机,是不是经常听到过,“mysql单表最好不要超过2000w”,“单表超过2000w就要考虑数据迁移了”,“你这个表数据都马上要到2000w了,难怪查询速度慢”这些名言民语就和“群里只讨论技术,不开车,开车速度不要超过120码,否则自动踢群”,只听过,没试过......
  • linux/docker 版 Sql Server新建的数据库插入中文乱码问题解决方案
    SqlServer插入遇到乱码原因:在英文系统中,SqlServer默认排序规则为英文字典顺序解决方案一:容器版SqlServer,在创建容器时,可以加上环境变量-eMSSQL_COLLATION=Chinese_PRC_CI_AS-eTZ=Asia/Shanghai 把排序规则设为中文字典顺序并忽略大小写区分重音,时区设置为上海,不然......
  • 微信小程序hideLoading隐藏showToast提示的问题
     在调用hideLoading与hideToast时配置参数noConflict:true取消混用特性,解决hideLoading隐藏showToast提示的问题。wx.hideLoading({noConflict:true})//也适用于TaroTaro.hideLoading({noConflict:true}) ......
  • IDEA 关闭SpringBoot启动Logo/图标
     一、环境1、SpringBoot2.6.4 MavenPOM格式<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.4</version><relativePath/></par......
  • mysql 优化之开启慢查询并分析原因
      第一步.开启mysql慢查询方式一:修改配置文件my.ini增加几行:slow_query_log=on#开启慢查询日志slow_query_log_file=filename#指定日志文件保存路径,不指定的话默认在数据库文件目录下,名为hostname-slow.loglong_query_time=2#指定达到多少秒才算慢查询long-que......