繁体   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