Django中如果model.py写为AUTOFiled,id就会自增。但是用delete删除以后,新增的数据id只会接着往下排列。于是…

首先报上一波,我开发的运行环境

运行环境 Runtime environment

1
2
操作系统 : Ubuntu18.04LTS
Software: mysql Ubuntu版

背景

在mysql的数据库设计中,一般都会设计自增的数字列,用作业务无关的主键。 在数据库出现频繁的删除操作或者清空操作之后,其自增的值仍然会自动增长,如果需要重新开始该如何做呢?

解决方案

  1. alter table

    delete from table_name;
    ALTER TABLE table_name AUTO_INCREMENT = 1;

如果数据库表中的数据很多,则删除操作会持续比较久,这个问题需要注意。

  1. truncate

    truncate table_name;

直接清空数据,但是由于不能回滚,所以此操作是危险的,使用时需要谨慎。

两者的比较

主要的区别如下:

  1. truncate速度快,不做日志记录,故无法进行rollback操作。 delete反之;

  2. truncate会重置索引和自增初始值, delete则不会;

  3. truncate不会触发trigger,而delete则会触发。

以下是使用python的MySQLdb模块实现的方法实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import MySQLdb
# 删除表数据并重置ID
def Refresh_ID(connect,table_name):
"""
:param connect: 连接对象
:param table_name: 表名
:return:
"""
# 使用cursor()方法获取操作游标
cursor = connect.cursor()
sql1 = "DELETE FROM {table}".format(table=table_name)
sql2 = "ALTER TABLE {table} AUTO_INCREMENT = 1;".format(table=table_name)
try:
cursor.execute(sql1)
cursor.execute(sql2)
connect.commit()
except Exception as e:
print("删除表数据并重置ID 时发生错误:%s"%e)

这个代码只是一个样例,对于整个操作来讲,它只是一个部分,仅作参考。