有没有办法为一个MySQL表指定自定义自动增量起始值和自定义自动增量增量值?
我无法找到问题的明确答案。似乎有两个全局变量auto_increment_increment和auto_increment_offset但我只需要一个表。另一个网站建议使用AUTO_INCREMENT(<offset>,<increment>)
,但这种方法只是触发了MySQL错误。
有没有办法做到这一点?
答案 0 :(得分:1)
您无法在MySQL中基于每个表更改步骤。运行SET @@auto_increment_increment=2;
或更改启动值将影响服务器上的所有表和数据库。
据我所知,你有两种选择:
您可以考虑执行所需数学运算的触发器并设置自定义 价值到另一个领域。
在每个行开始trigger
之前创建触发器my_table
SET NEW.id2 = NEW.id * 2;
END
答案 1 :(得分:0)
你可以执行这个SQL,比如你想在3开始执行它:
ALTER TABLE foo AUTO_INCREMENT = 3;
正如其他人指出的那样,我不相信你能做到这两点。
答案 2 :(得分:0)
您可以通过以下方式更改要应用于下一个插入行的当前值:
ALTER TABLE table AUTO_INCREMENT = ?;
可以通过auto_increment_increment
服务器变量设置增量值。
不幸的是,如果在Global context中设置,这将影响服务器上的所有数据库/表。
您可以在特定会话的基础上设置此变量。因此,如果您想使用一组特定的数据库连接,您可以在会话的基础上设置该值,这是可能的。这可能有点难以管理,实际上,您需要一个不同的连接(或连接池)来更新这个单独的表。
答案 3 :(得分:0)
我找到了改变auto_increment的方法,只需改变表格。在将旧数据库迁移到新系统(从Heroku到Amazon)时我遇到了问题,但是必须保留所有旧数据(不是更改id),但每天都会发生十万次,所以如何保存数据和重复数据呢没有发生,我做了什么:
例如:
- Create table:
CREATE TABLE `test`.`table_inc` (
`idtable_inc_id` INT NOT NULL AUTO_INCREMENT,
`table_inccol` VARCHAR(45) NULL,
PRIMARY KEY (`idtable_inc_id`));
- Alter table (to remove auto increment)
ALTER TABLE `test`.`table_inc`
CHANGE COLUMN `idtable_inc_id` `idtable_inc_id` INT(11) NOT NULL ;
答案 4 :(得分:0)
我找到了这个解决方案的另一个答案
> mysqldump -u root -p database_heroku | sed 's/ AUTO_INCREMENT=[0-9]*\b/ AUTO_INCREMENT=1100001/' > /new_increment_with_data_heroku_database.sql
参考:http://melikedev.com/2011/06/01/mysql-remove-auto_increment-from-schema-dumps-mysqldump/