我的实时(托管)数据库和我的开发(本地)数据库中都有一个表。我想把一堆记录放到现场表中。
我一直在做的事情如下:
就这一切而言,一切正常。
问题是:如果在活动表中删除了一条记录,则步骤1不会将其从开发表中删除(即使您选择“用文件替换表”选项)。然后在步骤3的实时表中重新创建该记录。
我的问题:在我导入第1步之前,我应该截断开发表(当然是在备份之后)吗?我的导入是否会将开发表上的自动增量设置为与实时表上的相同点?还是我要把事情搞砸了?
感谢。
编辑:这是表格。 (不能让它更好地格式化;对不起。)列 - 类型 - 空 - 默认
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)否
指数:
Keyname Type独特的打包列基数整理无评论
PRIMARY BTREE是否cnum 2214 A否
答案 0 :(得分:4)
在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'
);
在这张桌子上运行了一个选择*我会看到这样的东西。
TestCustID Name
'1', 'Pieter'
由于我没有指定TestCustID,MySQl会生成一个。如果我运行以下插入查询:
INSERT INTO `test`.`TestCust`
(`TestCustID`,
`Name`
)
VALUES
(
15,
'Pieter'
);
然后在我看到的桌子上跑了一个选择*
TestCustID Name
'1' 'Pieter'
'15' 'Pieter'
因此,如果您截断了表格,它会将TestCustID重置为1(从头开始)。如果您在插入语句中明确指定生产/实时系统中的自动编号,如果您未指定自动编号,则将同步插入语句你将不同步。
希望能再澄清一点。
答案 1 :(得分:1)
截断后您无需导出/导入该主要自动增量列。只需导入其余列。它将自动管理自动增量列。