繁体   English   中英

MySQL-AUTO_INCREMENT,表的自定义增量开始和值

[英]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; 或更改启动值将影响服务器上的所有表和数据库。

据我所知,您有两种选择:

  1. 禁用MySQL的auto_increment并创建一些为您执行此操作的php函数,尽管除非它是一个非常低的交易站点,否则我不建议这样做。
  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),但是每天都有十万次发生,因此如何保存数据和重复数据呢?没发生,我做了什么:

  1. 在新系统数据库中关闭自动增量(Amazon)
  2. 新系统(Aamzon)中的脚本编写偏移量从1.000.000开始
  3. 从旧系统(Heroku)写入脚本导出数据
  4. 通过这种方式将脚本导入数据写入新系统,它们将保留所有数据,而不会更改任何offet
  5. 开启自动递增
  6. 完成。

例如:

- 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM