关于mysql自增id的获取和重置

转载请注明出处:帘卷西风的专栏(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。如果多客户端操作,而且不能保证原子性,这个值可能会出现错误。所以需要在插入之后调用。
  • 使用@@IDENTITY变量:select @@IDENTITY
    • 此方法和LAST_INSERT_ID()功能差不多,优缺点也一致。需要在插入后调用。
  • 使用mysql查询函数:SHOW TABLE STATUS;
    • 优点:能够准确的查到自增id。而且可以在语句后面加上where语句或者like语句来过滤。
    • 缺点:该语句返回的是一个记录集,不能单独的返回自增值。所以需要额外的操作来获取。
  • 使用自定义查询方法:mysql表相关的信息是放在information_schema表里。所以我们参考 SHOW TABLE STATUS来构建查询语句。如:
    • select Auto_increment into autoId from information_schema.tables where Table_Schema = ‘dbname’ and table_name = ‘tablename’;
    • 优点:高度自定义,能够准确的得到想得到的任何信息。
    • 确定:不容易记住。呵呵。

mysql自增id的重置

  • 使用truncate:truncate table;
    • 说明:使用truncate会删除表的数据释放空间,并且重置字自增id,但不会删除表的定义。
    • 用处:需要清空表的时候才能使用。
  • 使用修改标识:dbcc checkident (‘table_name’ , reseed, new_reseed_value) ;
    • 说明:new_reseed_value是设置的当前标识,下次插入则从new_reseed_value+1开始。如果new_reseed_value小于表中当前标识的值,有可能会产生重复key,会产生 2627 号错误信息。
    • 用处:此方法不会清空已有数据。适用于大量删除后修改新的标识,但不能比当前表中最大值小。
  • 使用修改表的方法:alter table tablename auto_increment=new
    • 说明:此方法和上面的二方法类似。也不会清空数据,有可能会出现重复key的可能,所以此方法也只适用于清空表之后重置自增id或者大量删除后修改自增id。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏chenssy

【死磕Java并发】—–Java内存模型之从JMM角度分析DCL

DCL,即Double Check Lock,中卫双重检查锁定。其实DCL很多人在单例模式中用过,LZ面试人的时候也要他们写过,但是有很多人都会写错。他们为什么...

425110
来自专栏跟着阿笨一起玩NET

C#常用操作类库四(File操作类)

31310
来自专栏专注 Java 基础分享

初识Hibernate之关联映射(一)

     上篇文章我们对持久化对象进行的学习,了解了它的三种不同的状态并通过它完成对数据库的映射操作。但这都是基于单张表的操作,如果两张或者两张以上的表之间存在...

20180
来自专栏菩提树下的杨过

温故而知新:设计模式之单件模式(Singleton)

 1 using System;  2  3 namespace Singleton  4 {  5 class Program  6     {  7 ...

19670
来自专栏我是攻城师

ElasticSearch的Mapping之字段类型

35250
来自专栏行者悟空

Hadoop之MapReduce原理及运行机制

22940
来自专栏技术点滴

单例模式(Singleton)

单例模式(Singleton) 单例模式(Singleton) 意图:保证一个类只有一个实例,并提供一个访问它的全局访问点。 应用:Session或者控件的唯一...

20460
来自专栏芋道源码1024

数据库中间件 MyCAT 源码解析 —— 分片结果合并(一)

1. 概述 相信很多同学看过 MySQL 各种优化的文章,里面 99% 会提到:单表数据量大了,需要进行分片(水平拆分 or 垂直拆分)。分片之后,业务上必然面...

485130
来自专栏python学习指南

Elasticsearch多索引

 在Elasticsearch中,一般的查询都支持多索引。 只有文档API或者别名API等不支持多索引操作,因此本篇就翻译一下多索引相关的内容。 首先,先...

65460
来自专栏木子昭的博客

<导图>Mysql入门基础语法及示例

数据库操作 查看所有数据库 show database; 创建数据库 语法 create database 数据库名 charset=utf8; 示例 ...

31390

扫码关注云+社区

领取腾讯云代金券