MySQL重置自動增量值

2019-10-16 22:57:02

在本教學中,我們將向您展示如何重置MySQL中AUTO_INCREMENT列的自動增量值。

MySQL提供了一個有用的功能,稱為自動增量。 您可以將自動遞增屬性分配給表的列,以生成新行的唯一標識。 通常,使用表的主鍵列的自動遞增屬性。

無論何時在表中插入新行,MySQL會自動將序列值分配給自動增量列。

例如,如果表有8行,並插入新行而不指定自動增量列的值,MySQL將自動插入一個id9的新行。

有時,可能需要重置自動增量列的值,以便插入到表中的第一個記錄的標識從特定的數位開始,例如重置為1

在MySQL中,可以以各種方式重置自動增量值。

MySQL重置自動增量值範例

首先,建立一個名為tmp的表,並將AUTO_INCREMENT屬性分配給id主鍵列。

USE testdb;
CREATE TABLE tmp (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(45) DEFAULT NULL,
  PRIMARY KEY (id)
);

其次,將一些樣本資料插入tmp表中:

INSERT INTO tmp(name)
VALUES('test 1'),
      ('test 2'),
      ('test 3');

第三步,查詢tmp表驗證插入操作:

SELECT * FROM tmp;

+----+--------+
| id | name   |
+----+--------+
|  1 | test 1 |
|  2 | test 2 |
|  3 | test 3 |
+----+--------+
3 rows in set

所上查詢結果所示,總共有三行,ID列的值分別為:123,現在,來看看如何重置ID列的自動增量值。

MySQL通過使用ALTER TABLE語句重置自動增量值

可以使用ALTER TABLE語句重置自動增量值。重置自動增量的值的ALTER TABLE語句的語法如下:

ALTER TABLE table_name AUTO_INCREMENT = value;

您可以在ALTER TABLE子句之後指定表名,並在表示式AUTO_INCREMENT = value中指定要重置的值。

請注意,該值必須大於或等於自動增量列的當前最大值。

我們刪除tmp表中的id值為3的最後一個記錄:

DELETE FROM tmp  WHERE ID = 3;

如果插入一行,MySQL將把4分配給新行的id列。 但是,可以使用ALTER TABLE語句將由MySQL生成的數位重置為3,如下所示:

ALTER TABLE tmp AUTO_INCREMENT = 3;

現在,嘗試向tmp表中插入一個新行並從中查詢資料以檢視效果:

INSERT INTO tmp(name)
VALUES ('MySQL example 3');

SELECT 
    *
FROM
    tmp;

執行上面查詢語句,得到以下結果 -

+----+-----------------+
| id | name            |
+----+-----------------+
|  1 | test 1          |
|  2 | test 2          |
|  4 | MySQL example 3 |
+----+-----------------+
3 rows in set

現在,表中有三行記錄,最後一個自動遞增值為3而不是4,這是像我們所預期的那樣。

MySQL使用TRUNCATE TABLE語句重置自動增量值

TRUNCATE TABLE語句刪除表的所有資料,並將auto_increment值重置為0
下面說明了TRUNCATE TABLE語句的語法:

TRUNCATE TABLE table_name;

通過使用TRUNCATE TABLE語句,可以刪除表的所有資料,並將自動遞增值重置為零。

MySQL使用DROP TABLE和CREATE TABLE語句重置自動增量值

您可以使用一對語句:DROP TABLECREATE TABLE來重置自動增量列。

TRUNCATE TABLE語句一樣,這些語句刪除刪除表並重新建立它,因此,自動增量的值將重置為0

DROP TABLE table_name;
CREATE TABLE table_name(...);

在本教學中,您已經學會了如何以各種方式重置MySQL中的自動增量值。 第一種方法是最好的,因為它是最簡單的方法,沒有副作用。


以下是糾正/補充內容:

《MySQL通過使用語句重置自動增量值》這個小節最後的結果錯誤,id應該為3而不為4.  提交時間:2019-09-09