簡體   English   中英

在MySQL 5.0中,是否可以在不更新auto_increment值的情況下插入帶有auto_increment列的表中?

[英]In MySQL 5.0, can one insert into a table with an auto_increment column without updating the auto_increment value?

我有一個MySQL數據庫,其中包含帶有auto_increment主鍵的表。

考慮以下定義足以滿足此示例要求:

create table test(id integer not null auto_increment primary key) engine=innodb;

現在,通常我將使用以下語法將此表插入:

insert into test() values();

這將適當地更新auto_increment值,這很好。

但是,我想在此表中插入一個高值(例如1000000),但希望它更新auto_increment ID。

是否可以以不影響auto_increment ID的值的方式將高值插入該表中?

我知道這是一個可怕的做法,但是它將大大簡化我必須做的一些事情。

提前致謝。

MySQL 5.0允許您在自動遞增字段中插入一個任意值,但這會改變用於自動遞增的下一個值。 而且,盡管您可以更改“下一個數字”,但將使用自動遞增字段( ALTER TABLE t AUTO_INCREMENT = number ),但是該字段必須大於該列中當前的最大值。

因此,不,您似乎並沒有達到您的要求。

您可以給行添加自己喜歡的ID。 例如,給定下表定義:

CREATE TABLE IF NOT EXISTS `stack-test` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255),
  PRIMARY KEY  (`id`)
);

以下查詢將插入具有自動生成的ID的行:

INSERT INTO `stack-test` (name) VALUES ('Peter');

並且此查詢將插入具有用戶定義的ID的行:

INSERT INTO `stack-test` (id, name) VALUES (5, 'Joe');

通過查詢所有行進行驗證:

SELECT * FROM `stack-test`;

輸出:

+----+-------+
| id | name  |
+----+-------+
|  1 | peter |
|  5 | Joe   |
+----+-------+

更新:請閱讀,您不想影響AUTO_INCREMENT值。 如staticsan所述, AUTO_INCREMENT字段自動使用最大值加1。 有一條語句會將計數器重置為某個值,但這僅在表中沒有更高的值時才有效:

ALTER TABLE `stack-test` AUTO_INCREMENT = 2;

我有一個類似的問題,盡管我喜歡上面的答案,但我還是通過使用兩個表解決了這個問題。 一個用於高ID,另一個用於低ID。 很適合我的特殊情況。

如何保留一些初始值而不是最終值? 我的意思是,保留ID,例如保留少於1000個。 將自動增量種子設為1001,以便新插入的值在此之后具有值,並使用IDENTITY INSERT在保留范圍內添加值。

希望能幫助到你。

我不這么認為-自動遞增字段必須是主鍵,因此不為null。

這是不可能的。 為了使事情表現出您建議的方式,當計數器最終確實達到您所插入的非常高的數字時,將引入一個重復的auto_increment值。

對不起,我很遺憾地指出了流血問題,而且我也不是RDBMS專家,但是您的要求不是那么“非常規”,以致於它決定了另一種方法嗎? 您自己說您知道這是“可怕的做法”。 自動遞增字段只為一個目的和一個目的而已:不是為一個特定的記錄分配唯一的ID,不是,將任何意義賦予實際值是絕對錯誤的嗎?

因此,試探性地,我是否可以建議使用另一個字段來執行您想要的操作?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM