Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-表的自动增量、自定义增量开始和值_Php_Mysql_Sql_Auto Increment - Fatal编程技术网

Php MySQL-表的自动增量、自定义增量开始和值

Php MySQL-表的自动增量、自定义增量开始和值,php,mysql,sql,auto-increment,Php,Mysql,Sql,Auto Increment,有没有办法只为一个MySQL表指定自定义自动增量起始值和自定义自动增量值 我找不到我问题的明确答案。似乎有两个全局变量auto_increment_increment和auto_increment_offset,但我只需要一个表。另一个网站建议使用自动增量(,),但这种方法只是触发了MySQL错误 那么有没有办法做到这一点呢?您可以执行此SQL,比如说,如果您想在3点启动它: ALTER TABLE foo AUTO_INCREMENT = 3; 正如其他人指出的那样,我不相信您可以同时做到这

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

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


那么有没有办法做到这一点呢?

您可以执行此SQL,比如说,如果您想在3点启动它:

ALTER TABLE foo AUTO_INCREMENT = 3;

正如其他人指出的那样,我不相信您可以同时做到这两个方面。

在MySQL中,您不能在每个表的基础上更改步骤。正在运行
SET@@auto\u increment\u increment=2或更改启动值将影响服务器上的所有表和数据库

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

  • 禁用MySQL的auto_increment并创建一些php函数来为 你,虽然我不会推荐这个,除非它是一个非常低的价格 交易网站 >P>可以考虑执行所需数学的触发器并设置自定义 将值添加到另一个字段

    为每行开始插入
    my_表
    之前创建触发器
    TRIGGER
    设置NEW.id2=NEW.id*2
    结束


  • 您可以通过以下方式更改要应用于下一个插入行的当前值:

    ALTER TABLE table AUTO_INCREMENT = ?;
    
    增量值可以通过
    auto\u increment\u increment
    服务器变量设置

    不幸的是,如果在全局上下文中设置,这将影响服务器上的所有数据库/表


    您可以在特定于会话的基础上设置此变量。因此,如果您想使用一组特定的DB连接,您可以在会话的基础上为其设置值,这是可能的。这可能有点难以管理,因为本质上,您需要一个独特的连接(或连接池)来更新这个表。

    我找到了更改自动增量的方法,只需更改表即可。我必须解决将旧数据库迁移到新系统(从Heroku迁移到Amazon)时的问题,但必须保留所有旧数据(不更改id),但每天都会发生十万次,因此我如何保持数据和重复数据不发生,我做了什么:

  • 关闭新系统数据库中的自动增量(Amazon)
  • 在新系统(Aamzon)中写入脚本集偏移量从1.000.000开始
  • 从旧系统(Heroku)写入脚本导出数据
  • 通过这种方式将脚本导入数据写入新系统,它们将保留所有数据,而不会更改任何offet
  • 启用“自动增量”
  • 完成了
  • 例:


    我找到了这个解决方案的另一个答案

    > mysqldump -u root -p database_heroku | sed 's/ AUTO_INCREMENT=[0-9]*\b/ AUTO_INCREMENT=1100001/'  > /new_increment_with_data_heroku_database.sql
    

    Ref:

    在没有触发器的情况下,不可能在表级别执行。这个问题似乎很相似:他想改变自动增量步长,而不是它的起始值。
    > mysqldump -u root -p database_heroku | sed 's/ AUTO_INCREMENT=[0-9]*\b/ AUTO_INCREMENT=1100001/'  > /new_increment_with_data_heroku_database.sql