[英]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.