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

时间:2014-01-14 18:41:43

标签: php mysql sql auto-increment

有没有办法为一个MySQL表指定自定义自动增量起始值和自定义自动增量增量值?

我无法找到问题的明确答案。似乎有两个全局变量auto_increment_increment和auto_increment_offset但我只需要一个表。另一个网站建议使用AUTO_INCREMENT(<offset>,<increment>),但这种方法只是触发了MySQL错误。

有没有办法做到这一点?

5 个答案:

答案 0 :(得分:1)

您无法在MySQL中基于每个表更改步骤。运行SET @@auto_increment_increment=2;或更改启动值将影响服务器上的所有表和数据库。

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

  1. 禁用MySQL的auto_increment并创建一些执行此操作的php函数 你,虽然我不推荐这个,除非它非常低 交易网站。
  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),但每天都会发生十万次,所以如何保存数据和重复数据呢没有发生,我做了什么:

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

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