【问题标题】:Auto increment does not work properly when copying record from one database to another将记录从一个数据库复制到另一个数据库时,自动增量无法正常工作
【发布时间】:2013-11-22 13:42:11
【问题描述】:

下面的 php 代码将记录从一个(mysql)数据库写入另一个。在此复制操作之前,目标数据库的 AGREEMENTS 表(具有常量名称 CORP_DBNAME)为空。两个表 AGREEMENTS 的“id”字段都是 AUTO_INCREMENT 类型。

复制操作有效,但不是 100% 正确:目标数据库表的 id 字段应为 1(我复制除 id 之外的所有字段的原因),但为 11 - id 的自动增量(10 ) 在原始数据库 (SUPPL_DBNAME) 中。例如,复制操作应始终将记录添加到具有适当递增 id 的目标数据库中。为什么会发生这种情况以及如何解决?

简化的php代码:

$id = 10;

$corpdb = new CORPDatabase(CORP_DBNAME);
$suppldb = new CORPDatabase(SUPPL_DBNAME);

$sql = "INSERT INTO ".CORP_DBNAME.".AGREEMENTS ( otherpartyid, agreementdocumentpath, approvalcorporation, approvalsupplier, created ) "
    . "SELECT otherpartyid, agreementdocumentpath, approvalcorporation, approvalsupplier, created FROM ".SUPPL_DBNAME.".AGREEMENTS "
    . "WHERE ".SUPPL_DBNAME.".AGREEMENTS.id=".$id." ";

$corpdb->UpdateDBRecord($sql);

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    试试:

    ALTER TABLE AGREEMENTS AUTO_INCREMENT = 1
    

    如果有问题的表完全是空的,你可以使用:

    TRUNCATE TABLE AGREEMENTS;
    

    在您将数据导入到的数据库中,AUTO_INCREMENT 应该返回 1。很可能是因为您删除了行而不是截断表。

    【讨论】:

    • 目标表不总是空的;例如,复制操作应始终将记录添加到具有适当递增 id 的目标数据库中。 (见我更新的文字)。为什么我用 AUTO INCREMENT 定义表时需要这条 ALTER 语句?
    • 如果目标表不总是空的,那么你不应该使用 TRUNCATE。您使用 AUTO INCREMENT 定义了表,但您之前也可能在其中插入了行。当您删除这些行时,AUTO INCREMENT 值与这些行在您的表中时的值相同。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2020-07-02
    • 1970-01-01
    • 2015-01-02
    • 2017-04-06
    相关资源
    最近更新 更多