![](/img/trans.png)
[英]MySQL INSERT INTO SELECT into a table with 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.