[英]MySQL - AUTO_INCREMENT, custom increment start and value for a table
有没有一种方法可以仅针对一个MySQL表指定自定义自动增量起始值和自定义自动增量增量值?
我找不到我的问题的明确答案。 似乎有两个全局变量auto_increment_increment和auto_increment_offset,但是我只需要一个表。 另一个站点建议使用AUTO_INCREMENT(<offset>,<increment>)
但是这种方法只是触发了MySQL错误。
那么有没有办法做到这一点?
在MySQL中,您无法按表更改步骤。 运行SET @@auto_increment_increment=2;
或更改启动值将影响服务器上的所有表和数据库。
据我所知,您有两种选择:
您可以考虑一个触发器,该触发器执行所需的数学运算并将自定义值设置为另一个字段。
在对每个行开始在my_table
插入之前创建触发trigger
SET NEW.id2 = NEW.id * 2;
结束
您可以执行此SQL,说出是否要从3开始:
ALTER TABLE foo AUTO_INCREMENT = 3;
正如其他人指出的那样,我不相信您可以同时做到。
您可以通过以下方式更改要应用于下一个插入行的当前值:
ALTER TABLE table AUTO_INCREMENT = ?;
可以通过auto_increment_increment
服务器变量来设置增量值。
不幸的是,如果在全局上下文中设置,这将影响服务器上的所有数据库/表。
您可以在特定于会话的基础上设置此变量。 因此,如果您要使用一组特定的数据库连接,并以会话为基础设置值,则可以。 从本质上讲,只需要一个唯一的连接(或连接池)来更新此单个表,就可能很难管理。
我找到了更改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 ;
我找到了该解决方案的另一个答案
> 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/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.