![](/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.