在MySQL 5.0中,可以使用auto_increment列插入表而不更新auto_increment值吗?

时间:2009-10-05 21:42:59

标签: mysql database auto-increment

我有一个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的值产生影响?

我知道这是一种可怕的做法,但它会大大简化我必须做的一些事情。

提前致谢。

7 个答案:

答案 0 :(得分:5)

MySQL 5.0允许您将任意值插入自动增量字段,但这确实会改变用于自动递增的下一个值。虽然您可以更改自动增量字段将使用的“下一个数字”(使用ALTER TABLE t AUTO_INCREMENT = number),但这必须大于该列中当前的最大值。

所以,不,似乎你无法实现你的要求。

答案 1 :(得分:2)

你可以给你的行你喜欢的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;

答案 2 :(得分:1)

我有一个类似的问题,虽然我喜欢上面的答案,但我通过使用两个表来解决它。一个用于高id,另一个用于低id。它非常适合我的特殊情况。

答案 3 :(得分:0)

我不相信 - 自动递增的字段必须是主键,因此不是空的。

答案 4 :(得分:0)

这是不可能的。如果计数器最终确实达到了你插入的那个非常高的数字,那么让你的行为与你建议的方式一样会引入一个重复的auto_increment值。

答案 5 :(得分:0)

如何保留一些初始值而不是最终值?我的意思是,保留ids,比如保留少于1000。将自动增量种子设置为1001,以便新插入后具有值,并使用IDENTITY INSERT在保留范围中添加值。

希望它有所帮助。

答案 6 :(得分:0)

很抱歉说出了流血'很明显,我根本不是RDBMS的专家,但不是你的要求所以"非正统的"它决定了另一种方法?你自己说你知道这是"可怕的做法"。关于自动增量字段的问题不在于它们只服务于一个目的和一个目的:为特定记录分配一个唯一的ID,并且它不是,嗯,绝对错误地将任何重要性归因于任何实际值?

所以,试探性地说,我可以建议使用另一个领域来做你想做的事吗?