MYSQL删除表的记录后如何使ID从1开始

2023-11-11

转载于https://www.cnblogs.com/no7dw/archive/2010/04/16/1713240.html

YSQL删除表的记录后如何使ID从1开始
MYSQL删除表的记录后如何使ID从1开始
http://hi.baidu.com/289766516/blog/item/a3f85500556e2c09728da5e1.html

2009-11-30 14:24
方法1:
truncate table 你的表名
//这样不但将数据全部删除,而且重新定位自增的字段

方法2:
delete from 你的表名
dbcc checkident(你的表名,reseed,0)
//重新定位自增的字段,让它从1开始

方法3:
如果你要保存你的数据,介绍你第三种方法,by QINYI
用phpmyadmin导出数据库,你在里面会有发现哦
编辑sql文件,将其中的自增下一个id号改好,再导入。


truncate命令是会把自增的字段还原为从1开始的,或者你试试把table_a清空,然后取消自增,保存,再加回自增,这也是自增段还原为1 的方法。


MySql数据库唯一编号字段(自动编号字段)
在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性

来自动生成。MySQL支持多种数据表,每种数据表的自增属性都有差异,这里将介绍各种数据表里的数据

列自增属性。

ISAM表

如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开

始,并1为基数递增。

把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做,还是以插入NULL值为好。

当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。

当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,情况一,如果

插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;情况

二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递

增。也就是说,可以跳过一些编号。

如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。

如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号

从该值开始递增。

如果用replace命令基于AUTO_INCREMENT数据列里的值来修改数据表里的现有记录,即AUTO_INCREMENT数

据列出现在了replace命令的where子句里,相应的AUTO_INCREMENT值将不会发生变化。但如果replace命

令是通过其它的PRIMARY KEY OR UNIQUE索引来修改现有记录的(即AUTO_INCREMENT数据列没有出现在

replace命令的where子句中),相应的AUTO_INCREMENT值–如果设置其为NULL(如没有对它赋值)的话–就

会发生变化。

last_insert_id()函数可获得自增列自动生成的最后一个编号。但该函数只与服务器的本次会话过程中

生成的值有关。如果在与服务器的本次会话中尚未生成AUTO_INCREMENT值,则该函数返回0。

其它数据表的自动编号机制都以ISAM表中的机制为基础。

MyISAM数据表

删除最大编号的记录后,该编号不可重用。

可在建表时可用“AUTO_INCREMENT=n”选项来指定一个自增的初始值。

可用alter table table_name AUTO_INCREMENT=n命令来重设自增的起始值。

可使用复合索引在同一个数据表里创建多个相互独立的自增序列,具体做法是这样的:为数据表创建一

个由多个数据列组成的PRIMARY KEY OR UNIQUE索引,并把AUTO_INCREMENT数据列包括在这个索引里作为

它的最后一个数据列。这样,这个复合索引里,前面的那些数据列每构成一种独一无二的组合,最末尾

的AUTO_INCREMENT数据列就会生成一个与该组合相对应的序列编号。
HEAP数据表

HEAP数据表从MySQL4.1开始才允许使用自增列。

自增值可通过CREATE TABLE语句的 AUTO_INCREMENT=n选项来设置。

可通过ALTER TABLE语句的AUTO_INCREMENT=n选项来修改自增始初值。

编号不可重用。

HEAP数据表不支持在一个数据表中使用复合索引来生成多个互不干扰的序列编号。

BDB数据表

不可通过CREATE TABLE OR ALTER TABLE的AUTO_INCREMENT=n选项来改变自增初始值。

可重用编号。

支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号。

InnDB数据表

不可通过CREATE TABLE OR ALTER TABLE的AUTO_INCREMENT=n选项来改变自增初始值。

不可重用编号。

不支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号。

在使用AUTO_INCREMENT时,应注意以下几点:

AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。

设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序

列的编号个可增加一倍。

AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。

AUTO_INCREMENT数据列必须具备NOT NULL属性。

AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上

UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。

当进行全表删除时,AUTO_INCREMENT会从1重新开始编号。全表删除的意思是发出以下两条语句时:

delete from table_name;
or
truncate table table_name

这是因为进行全表操作时,MySQL实际是做了这样的优化操作:先把数据表里的所有数据和索引删除,然

后重建数据表。如果想删除所有的数据行又想保留序列编号信息,可这样用一个带where的delete命令以

抑制MySQL的优化:

delete from table_name where 1;

这将迫使MySQL为每个删除的数据行都做一次条件表达式的求值操作。

强制MySQL不复用已经使用过的序列值的方法是:另外创建一个专门用来生成AUTO_INCREMENT序列的数据

表,并做到永远不去删除该表的记录。当需要在主数据表里插入一条记录时,先在那个专门生成序号的

表中插入一个NULL值以产生一个编号,然后,在往主数据表里插入数据时,利用LAST_INSERT_ID()函数

取得这个编号,并把它赋值给主表的存放序列的数据列。如:

insert into id set id = NULL;
insert into main set main_id = LAST_INSERT_ID();

可用alter命令给一个数据表增加一个具有AUTO_INCREMENT属性的数据列。MySQL会自动生成所有的编号

要重新排列现有的序列编号,最简单的方法是先删除该列,再重建该,MySQL会重新生连续的编号序列。

在不用AUTO_INCREMENT的情况下生成序列,可利用带参数的LAST_INSERT_ID()函数。如果用一个带参数

的LAST_INSERT_ID(expr)去插入或修改一个数据列,紧接着又调用不带参数的LAST_INSERT_ID()函数,

则第二次函数调用返回的就是expr的值。下面演示该方法的具体操作:

先创建一个只有一个数据行的数据表:
create table seq_table (id int unsigned not null);
insert into seq_table values (0);
接着用以下操作检索出序列号:
update seq_table set seq = LAST_INSERT_ID( seq + 1 );
select LAST_INSERT_ID();
通过修改seq+1中的常数值,可生成不同步长的序列,如seq+10可生成步长为10的序列。

该方法可用于计数器,在数据表中插入多行以记录不同的计数值。再配合LAST_INSERT_ID()函数的返回

值生成不同内容的计数值。这种方法的优点是不用事务或LOCK,UNLOCK表就可生成唯一的序列编号。不

会影响其它客户程序的正常表操作。

alter table table_name auto_increment=n;
注意n只能大于已有的auto_increment的整数值,小于的值无效.
show table status like ‘table_name’ 可以看到auto_increment这一列是表现有的值.
步进值没法改变.只能通过下面提到last_inset_id()函数变通使用

在使用AUTO_INCREMENT时,应注意以下几点:

AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。

设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序

列的编号个可增加一倍。

AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。

AUTO_INCREMENT数据列必须具备NOT NULL属性。

AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上

UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。

在不用AUTO_INCREMENT的情况下生成序列,可利用带参数的LAST_INSERT_ID()函数。如果用一个带参数

的LAST_INSERT_ID(expr)去插入或修改一个数据列,紧接着又调用不带参数的LAST_INSERT_ID()函数,

则第二次函数调用返回的就是expr的值。下面演示该方法的具体操作:

先创建一个只有一个数据行的数据表:
create table seq_table (id int unsigned not null);
insert into seq_table values (0);
接着用以下操作检索出序列号:
update seq_table set seq = LAST_INSERT_ID( seq + 1 );
select LAST_INSERT_ID();
通过修改seq+1中的常数值,可生成不同步长的序列,如seq+10可生成步长为10的序列。

该方法可用于计数器,在数据表中插入多行以记录不同的计数值。再配合LAST_INSERT_ID()函数的返回

值生成不同内容的计数值。这种方法的优点是不用事务或LOCK,UNLOCK表就可生成唯一的序列编号。不

会影响其它客户程序的正常表操作。

有两点需要加强注意:
1、只有一列的时候是不行的!
2、自动编号必须作为主键才有效!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MYSQL删除表的记录后如何使ID从1开始 的相关文章

  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 在服务器上找不到本地主机或 phpMyAdmin:如何修复?

    我按照安装说明进行操作PHP MySQL and PHPMyAdmin 但是当我尝试访问时http localhost phpmyadmin 我收到此错误 未找到 在此找不到请求的 URL phpmyadmin 服务器 然后我尝试访问loc
  • 比特纳米。重置mysql根密码

    我如何重置 MySQL 中的 root 密码和帐户 因为我按照如何为其他服务器授予权限的说明操作 并且意外地将 root 用户 Mysql 绑定到其他 IP 地址 现在看来我无法在 localhost 上以管理员身份登录 Thanks 您有
  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take
  • SELECT 语句会受到 SQL 注入攻击吗?

    实际上有2个问题 我知道我必须尽可能多地使用存储过程 但我想知道以下内容 A 我可以从 SELECT 语句 例如 Select from MyTable 获得 SQL 注入攻击吗 B 另外 当我在 ASP NET 中使用 SQLDataSo
  • 自加入表

    我有一张像这样的桌子 Employee name salary a 10000 b 20000 c 5000 d 40000 我想获取所有工资高于A工资的员工 我不想使用任何嵌套或子查询 在采访中被问及并暗示是使用自连接 我真的不知道如何实
  • 为什么我可以像调用实例方法一样调用类方法?

    我正在查看这个例子 class SQLObject def self columns return columns if columns columns DBConnection execute2 lt lt SQL first SELEC
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • SQL - != 'NULL' 的解释

    我的SSMS代码如下 Select top 50 From FilteredContact Where statuscode 1 and emailaddress1 NULL and telephone1 NULL and address1
  • SQL Server 上的语法错误

    这可能是一个愚蠢的语法错误 但我只是继续阅读我的程序 但我无法弄清楚我的错误在哪里 消息 156 第 15 级 状态 1 第 41 行关键字附近的语法不正确 为了 这是我的代码 alter procedure LockReservation
  • SQL 国家字符 (NCHAR) 数据类型的真正用途是什么?

    也CHAR CHARACTER and VARCHAR CHARACTER VARYING SQL 提供了NCHAR NATIONAL CHARACTER and NVARCHAR NATIONAL CHARACTER VARYING 类型
  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤

随机推荐

  • 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它 将会被按顺序插入的位置,你可以假设数组中无重复元素.(二分法)

    class Solution public int searchInsert int nums int target int left 0 right nums length 1 int mid 1 while left lt right
  • K-近邻算法之鸢尾花实例 使用Spark实现KNN的Demo

    1 1 K 近邻算法 KNN 概念 K Nearest Neighbor算法又叫KNN算法 这个算法是机器学习里面一个比较经典的算法 总体来说KNN算法是相对比较容易理解的算法 定义 如果一个样本在特征空间中的k个最相似 即特征空间中最邻近
  • 前端系列之jQuery(jQuery弹出层)

    弹出层与使用场景介绍 弹出层代码编写 html整体结构 div class layer mask div div class layer pop div class layer close div div class layer conte
  • 堆排序heapsort

    class declspec dllexport HeapSort public HeapSort int a int len HeapSort void AdjustHeap private int array int length vo
  • 应用程序的两种架构(c/s两层 b/s三层)2

    C S架构是客户端 Client 服务器 database Server 架构 B S是浏览器 Broswer 服务器 web Server database Server 架构 实际上B S架构也算是C S架构 是为了区分一下 一般来说把
  • 基于springboot的幼儿园管理系统

    基于springboot的幼儿园管理系统 项目介绍 幼儿园管理系统 java项目 springboot项目 eclipse和idea都能打开运行 推荐环境配置 eclipse idea jdk1 8 maven mysql 前端技术 Lay
  • 接口自动化面试题汇总,Offer快到碗里来

    一 请问你是如何做接口测试的 大体来说 经历以下过程 接口需求调研 接口测试工具选择 接口测试用例编写 接口测试执行 接口测试回归 接口测试自动化持续集成 具体来说 接口测试流程分成以下九步 第一步 分析出测试需求 并请开发提供接口说明文档
  • Python的关键字和builtins模块

    关键字 from keyword import kwlist print kwlist 于是得到了长度为33的list False None True and as assert break class continue def del e
  • java计算1-100之间的素数和(详细版)

    一 素数概念 除了一和自己本身外不能被其他数整除 并且素数大于1 二 解题思路 1 首先定义一层外层循环 表示1 100之间的每一个数 2 定义一个内层循环 范围大于1 小于外层循环 相当于被外层循环一个一个整除 看是否能除尽 例如外层循环
  • websocket介绍

    偶然在知乎上看到一篇回帖 瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有 所以转到我博客里 分享一下 比较喜欢看这种博客 读起来很轻松 不枯燥 没有布道师的阵仗 纯粹为分享 废话这么多了 最后再赞一个
  • matlab的narx的使用,matlab NARX做时间序列预测的问题

    NARX 神经网络做一个时间序列预测的时候碰到一些问题 1 目标 用input 178 2 预测output 178 1 数据和程序附后 2 问题 1 训练不多几次就会出现的时候 Maximum MU reached 从而训练停止 这个该如
  • 在Asp.net页面中实现数据饼图

    ASP NET之所以能够在客户端浏览器中形成各种数据图片 是因为在ASP NET中提供了绘图功能 具体的作法是先在服务器端创建一个Bitmap实例 然后利用ASP NET中提供的绘图功能 按照要生成的图片的模样 进行绘制 最后把绘制好的实例
  • 城市内涝地埋式积水监测系统解决方案

    一 方案背景 近 20 年来 我国城市化进程加快 城市地区由于人口密集 物资财产密度不断加大等特点 高强度暴雨积水形成的洪涝灾害对城市化地区产生的威肋和带来的狠失愈来愈大 由于城市的不断扩建 使工业区 商业区和居民区等不渗水的面积越来越大
  • MySQL8.0.28安装教程

    MySQL8 0 28安装教程 一 下载并配置安装文件 1 进入官网下载mysql安装包 2 解压安装包 如下图所示 3 添加配置文件my ini 新建一个文本文件 将下列内容复制到文件中 并将文件另存为 ini格式 mysqld 设置33
  • Oracle 存储过程动态sql 中出现 日期格式 中文及符号等的处理 多重for循环

    最近针对一个多维度业务逻辑写了一个存储过程 遇到的问题留存以下 1 声明的变量 长度不够导致 这个当时客户不提供debug权限 无法查到问题 可通过 plsql 文件 命令窗口 exec 存储过程名称 可以大致拿到错误原因 写一点测试一点
  • unity3d Animator,Animation动画相关笔记

    Animation是一个动画效果 比如一个攻击动画 奔跑动画 AnimatorController是多个animation的集合 并且能够控制在多个animation之间切换展示 因此 双击一个AnimatorControllers类能看到
  • 华为路由交换设备配置综合实验(实验六合一)

    华为路由交换设备配置综合实验 单臂路由 三层交换 动静路由 VRRP路由 DHCP中继 捆绑Etrunk链路 实验六合一 实验拓扑图 目的 实现全网各个PC之间的互联互通 全部实验脚本如下 以下脚本直接复制即可使用 一 实现右部DHCP中继
  • CocosCreator之KUOKUO教你如何用瓦片地图生成碰撞赛车道

    本次引擎v2 0 10 目标 瓦片地图生成碰撞赛车道 过程 首先 我们需要撸一个瓦片地图 很简单的地图 分两层 墙和地面 然后 在CocosCreator中直接拖进层级管理器就行 然后你就会发现层自动形成节点并挂载组件了 然后给wall和c
  • 如何使用Python进行数据分析

    Python是一种通用编程语言 也被广泛应用于数据科学领域 Python的强大之处在于其庞大的生态系统和可扩展性 在本篇博文中 我们将讨论如何使用Python进行数据分析 1 安装Python及其库 首先 您需要安装Python并配置其环境
  • MYSQL删除表的记录后如何使ID从1开始

    转载于https www cnblogs com no7dw archive 2010 04 16 1713240 html YSQL删除表的记录后如何使ID从1开始 MYSQL删除表的记录后如何使ID从1开始 http hi baidu