2

我的实时(托管)数据库和开发(本地)数据库中都有一个表。我想将一堆记录放入实时表中。

我一直在做的事情如下:

  1. 使用 phpMyAdmin 将活动表的副本导出/导入回开发数据库。
  2. 使用 C 批处理文件将新数据加载到开发表中。
  3. 再次使用 phpMyAdmin 将更新后的开发表的副本导出/导入到实时数据库。

就目前而言,这一切都很好。

问题是这样的:如果一条记录已在活动表中删除,第 1 步不会将其从开发表中删除(即使您选择“用文件替换表”选项)。然后在步骤 3 中在活动表中重新创建此记录。

我的问题:我应该在第 1 步导入之前截断开发表(当然是在备份之后)吗?我的导入会将开发表上的自动增量设置为与实时表上的相同点吗?还是我要把事情搞得一团糟?

谢谢。

编辑:这是桌子。(无法更好地格式化;抱歉。)

列 - 类型 - NULL - 默认

cnum smallint(6) 否
unum smallint(6) 否 1
cat_subject smallint(2) 否 0
cat_major smallint(2) 否 0
cat_minor smallint(2) 否 0
cat_flavour char(1) 是 NULL
unmod varchar(255) 否

指数:

键名类型唯一填充列基数排序空注释

PRIMARY BTREE 是 否 cnum 2214 A 否

4

2 回答 2

5

截断 MySQL 中的表将重置自动编号/身份列。除非您的脚本明确地将自动编号从 live 插入到 dev 中,否则您将遇到一个大问题。

如果您可以发布一些表结构和代码,我将能够通过一些代码为您提供更好的答案。

更新:

只是为了澄清一点关于自动编号和 MySQL 的信息。让我们创建一个表,如下所示:

CREATE TABLE `testcust` (
 `TestCustID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(32) DEFAULT NULL,
 PRIMARY KEY (`TestCustID`)
) ENGINE=InnoDB;

如果我使用以下查询插入数据:

INSERT INTO `test`.`TestCust`
(`TestCustID`,
  `Name`
)
VALUES
(
  NULL,
 'Pieter'
);

并在这张桌子上运行一个 select * 我会看到这样的东西。

TestCustID     Name
 '1',          'Pieter'

由于我没有指定 TestCustID MySQl 将生成一个。如果我运行以下插入查询:

INSERT INTO `test`.`TestCust`
 (`TestCustID`,
  `Name`
 )
 VALUES
 (
     15,
     'Pieter'
 );

然后在我会看到的桌子上运行一个 select *

TestCustID     Name
 '1'          'Pieter'
 '15'         'Pieter'

因此,如果您截断表,它将 TestCustID 重置为 1(从头开始)。如果您在插入语句中明确指定生产/实时系统中的自动编号,如果您未在插入语句中指定自动编号,您将保持同步你会失去同步。

希望能更清楚一点。

于 2012-05-28T11:15:24.167 回答
1

截断后您不需要导出/导入该 Primary Auto Increment 列。只需导入其余的列。它将自动管理自动增量列。

于 2012-05-28T11:51:41.533 回答