网站首页 > 文章中心 > 其它

mysql怎么把自增清楚

作者:小编 更新时间:2023-10-05 18:12:46 浏览量:8人看过

将mysql自增id字段清零,

也就是说不用管每条记录的id会不会变咯?

方法一:使用select ...into outfile 和 load data infile ...

①导出除了字段id的所有字段

例子:

#建立测试表 lt1

Query OK, 0 rows affected (0.11 sec)

#插入测试数据

mysql怎么把自增清楚-图1

#查看测试表的数据,这时候id不连续.

mysql select * from lt1;

+----+------+------+

| 1 | 1 | 1 |

#清空lt1

mysql truncate table lt1;

#现在id连续了

方法二:

使用临时表create table ...select ... 和 insert ...select ...

#还是lt1表,先清空

#创建临时表lt11

#临时表的数据

mysql select *from lt11;

+------+------+

| 1 | 1 |

#将临时表lt11的数据插入lt1中

#查看结果,id已经连续.

mysql select *from lt1;

唔,这么辛苦,给个最佳至少啊...

清空MySQL表,如何使ID重新从1自增?

清空MySQL表,使ID重新从1自增的步骤如下:

我们需要准备的材料分别是:电脑、Mysql查询器.

①.、首先,打开Mysql查询器,连接上相应的mysql连接.

怎么重置mysql的自增列AUTO

重置mysql的自增列AUTO的方法有:

方法一: delete from tb1;

ALTER TABLE tbl AUTO_INCREMENT = 100;

方法二: truncate tb1;

重置mysql的自增列 的步骤如下:

① 支持设置自增列的值 ;

ALTER TABLE table_name AUTO_INCREMENT = 1;

这种方式只能设置大于当前使用的值,不能设置小于等于当前已经使用的自增列的值.myisam如果设置小于等于,则自增列的值会自动设置为 :

当前最大值加1,innodb则不会改变.

TRUNCATE TABLE table_name;

DROP TABLE table_name;

CREATE TABLE table_name { ... };

使用两种方法重置mysql的自增列AUTO的好处有:

方法一:可设置 AUTO_INCREMENT 为任意值开始;

方法二:简单, AUTO_INCREMENT 值重新开始计数;

注意:使用以上方法都会将现有数据删除.

mysql怎么让自增长的

①.、创建表时指定AUTO_INCREMENT自增值的初始值(即起始值):

ALTER TABLE XXX AUTO_INCREMENT=100;

即使在你将整个表中的所有数据delete清空后,之前的自增序列最大值还是会被重用.

解决办法是:

使用 ALTER TABLE XXX AUTO_INCREMENT=0; 重新设置自增初始值.

怎么重置mysql的自增列

支持设置自增列的值

ALTER

TABLE

table_name

AUTO_INCREMENT

=

不过这种方式只能设置大于当前使用的值,不能设置小于等于当前已经使用的自增列的值.myisam如果设置小于等于,则自增列的值会自动设置为当前最大值加1.innodb则不会改变.

TRUNCATE

table_name;

注意:TRUNCATE

会清空表中数据

DROP

CREATE

{

...

};

一文让你彻底弄懂MySQL自增列

①? 通过auto_increment关键字来指定自增的列,并指定自增列的初始值为1.

首先:表中自增列的上限是根据自增列的字段类型来定的.

若设定了自增id充当主键,当达到了自增id的上限值时,会发生什么样的事情呢?还是以上面创建的 t表为例, 先回顾它的表结构:

CREATETABLE +t+ (

+id+ int(11) NOT NULL AUTO_INCREMENT,

PRIMARY KEY (+id+)

QueryOK, 0 rows affected (0.01 sec)

Records:0? Duplicates: 0? Warnings: 0

QueryOK, 1 row affected (0.01 sec)

对于写入量大,且经常删除数据的表,自增id设为int类型还是偏小的,所以我们为了避免出现自增id涨满的情况,这边统一建议自增id的类型设为unsigned bingint,这样基本可以保障表的自增id是永远够用的.

这里内容比较多,innodb是索引组织表,所以涉及到索引的知识,但这不是本文的重点,我们快速回顾索引知识:

①? Innodb索引分为主键跟辅助索引,主键即全表,辅助索引叶子节点保存主键的值,而主键的叶子节点保存数据行,中间节点存着叶子节点的路由值.

其实能够理解索引的结构及索引写入插入、更新的原理,则自然就明白为何建议使用自增id.这里我直接列出使用自增id 当主键的好处吧:

①? 顺序写入,避免了叶的分裂,数据写入效率好

容易出现不连续的id

自增id的修改机制如下:

在MySQL里面,如果字段id被定义为AUTO_INCREMENT,在插入一行数据的时候,自增值的行为如下:

① 如果插入数据时id字段指定为0、null 或未指定值,那么就把这个表当前的

AUTO_INCREMENT值填到自增字段;

根据要插入的值和当前自增值的大小关系,自增值的变更结果也会有所不同.假设,某次要插入的值是X,当前的自增值是Y.

① 如果XY,那么这个表的自增值不变;

新的自增值生成算法是:从auto_increment_offset开始,以auto_increment_increment为步长,持续叠加,直到找到第一个大于X的值,作为新的自增值.

Insert、update、delete操作会让id不连续.

Delete、update:删除中间数据,会造成空动,而修改自增id值,也会造成空洞(这个很少).

Insert:插入报错(唯一键冲突与事务回滚),会造成空洞,因为这时候自增id已经分配出去了,新的自增值已经生成,如下面例子:

+----+------+

| id | name |

|? 1| aaa? |

+----------------+

| Auto_increment |

①. row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

①. row in set (0.01 sec)

可以看到,虽然事务回滚了,但自增id已经回不到从前啦,唯一键冲突也是这样的,这里就不做测试了.

在批量插入时(insert select等),也存在空洞的问题.看下面实验:

①? 语句执行过程中,第一次申请自增id,会分配1个;

①.:mysql的默认设置.普通的insert语句申请后立马释放,insert select、replace insert、load data等批量插入语句要等语句执行结束后才释放,并发读得到提升

在彻底了解了MYSQL的自增机制以后,在实际生产中就能灵活避坑,这里建议不要用自增id值去当表的行数,当需要对大表准确统计行数时,可以去count(*)从库,如果业务很依赖大表的准确行数,直接弄个中间表来统计,或者考虑要不要用mysql的innodb来存储数据,这个是需要自己去权衡.另外对于要求很高的写入性能,但写入量又比较大的业务,自增id的使用依然存在热点写入的问题,存在性能瓶颈,这时候可通过分库分表来解决.

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章