如何让mysql的自动递增的字段重新从1开始

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让mysql的自动递增的字段重新从1开始相关的知识,希望对你有一定的参考价值。

1 清空所有数据,将自增去掉,存盘,在加上自增,存盘,就从1开始了
如何让mysql的自动编号从1开始

2 truncate table 你的表名
这样不但将清除数据,而且可以重新位置identity属性的字段

不过以上都不能保留现有数据哦。
以下为设置MySQL自动增长从某个指定的数开始
1 创建表的时候就设置:
CREATE TABLE `Test` (
`ID` int(11) NOT NULL AUTO_INCREMENT,

`class` varchar(2) NOT NULL,
`NAME` varchar(50) NOT NULL,
`SEX` varchar(2) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MEMORY AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC

2 如果在创建表时没有设置,后来想设置,可以通过修改实现:
alter table Test auto_increment = 1000;

分类: mysql
参考技术A alter table table_name auto_increment=n;
注意n只能大于已有的auto_increment的整数值,小于的值无效.
show table status like 'table_name' 可以看到auto_increment这一列是表现有的值.
如果曾经的数据都不需要的话,可以直接清空所有数据,并将自增字段恢复从1开始计数
truncate table 表名!

MySQL 自动递增自定义值

【中文标题】MySQL 自动递增自定义值【英文标题】:MySQL Auto Increment Custom Values 【发布时间】:2011-07-10 20:21:29 【问题描述】:

我正在尝试在 mysql 数据库中创建一个自动递增一但从 0-Z 开始然后滚动的列。

例如 000, 001, 002, ..., 009, 00A, 00B, ..., 00Z, 010, ..., 0ZZ, ..., 100.

我想让数据库通过自动递增字段创建列。

我的想法是:

    为从 0 到 36 的每个字符创建一列,然后将第 N 行(其中 N 是最低有效位)自动增加 1。然后在每列上添加一个触发器,以在列 N-1 列添加 1 N 达到 36。 创建一个包含 36 行的表,其中每行包含一个字符 0-Z,并使用与上述类似的进位逻辑从表中提取适当的字符 创建一个存储过程来执行第 1 项中的相应逻辑 让实际程序生成一个值并将其插入到表中 有一个常规的自动递增值并计算序列中的下一个值(这是最不理想的,因为它很难被仅查看数据库的人解析)

我希望有一些优雅的东西可以像内置机制一样允许这样做,我只是不知道。我对存储过程/触发器一无所知,因此将不胜感激。我认为最简单的方法是为字符创建一个查找表,当到达第 36 行时,它被重置为 0,然后有一个进位到第 N-1 行。

【问题讨论】:

您是否也打算将此列用作您的主键? 我愿意,但这不是绝对必要的 好的,那么您能解释一下字母数字 ID 背后的原因 - 为什么带有 auto_incremenet 的常规整数字段不够用? 是接收最终数据产品的人使用的标识符 【参考方案1】:

根据您的 cmets,我的建议是执行以下操作:

使用常规整数 auto_increment 列作为行的主键,然后使用 varchar 类型的列或 *text 类型之一(取决于您的 mysql 服务器版本和数据存储要求)来存储您的“标识符”客户使用的。

标识符可以使用触发器自动生成。

如果您要根据标识符进行查找(即,也许用户输入标识符以“跳转到”记录),您将需要该列的索引。

【讨论】:

你试过了吗?直到BEFORE 触发器运行后才会生成自动增量值,并且修改AFTER 触发器中的任何列都为时已晚。 您当然可以修改 AFTER 触发器中的列 - UPDATE foo set bar='bas' where id=NEW.id ERROR 1442 (HY000): Can't update table 'foo' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 您当然可以修改其他表中的列,但不能修改触发触发器的表。 嗯。我需要找到我在哪里实现了类似的东西,以提醒我实际上是如何做到的。

以上是关于如何让mysql的自动递增的字段重新从1开始的主要内容,如果未能解决你的问题,请参考以下文章

如何让mysql的自动递增的字段重新从1开始

如何让mysql从前一行值开始自动递增

如何从 mysql 表中获取自动递增字段名称或主键字段名称?

oracle数据库插入一ID字段,如何让他从一开始递增?

如何在 PHPMyAdmin 中使 MySql 中的字段自动递增?

自动递增 - 每年自动重置