[英]MySQL table - to truncate or not to truncate?
我的活动(托管)数据库和开发(本地)数据库中都存在一个表。 我想将一堆记录放入实时表中。
我一直在做如下:
就一切而言,这一切都很好。
问题是这样的:如果在活动表中删除了一条记录,则步骤1不会将其从dev表中删除(即使您选择了“用文件替换表”选项)。 然后,在步骤3中在活动表中重新创建该记录。
我的问题:在步骤1导入之前,我应该截断dev表(当然是在备份之后)吗? 我的导入功能是否会将dev表上的自动增量设置为与实时表上的自动增量相同? 还是我要使事情变得可怕?
谢谢。
编辑:这是桌子。 (无法使其格式更好;抱歉。)
列-类型-NULL-默认
Cnum smallint(6)否
unum smallint(6)否1
cat_subject smallint(2)否0
cat_major smallint(2)否0
cat_minor smallint(2)否0
cat_flavor char(1)是NULL
unmod varchar(255)否
指数:
关键字名称类型唯一填充列基数归类空注释
主BTREE是否cnum 2214 A否
在MySQL中截断表格将重置自动编号/标识列。 除非您的脚本明确将livenumber从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(从头开始)。如果您在插入语句中从生产/活动系统中明确指定了自动编号,那么如果您未在插入语句中指定自动编号,则会同步您将不同步。
希望能进一步澄清它。
截断后,您不需要导出/导入“主要自动增量”列。 只需导入其余的列。 它会自动管理自动递增列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.