簡體   English   中英

MySQL表-截斷還是不截斷?

[英]MySQL table - to truncate or not to truncate?

我的活動(托管)數據庫和開發(本地)數據庫中都存在一個表。 我想將一堆記錄放入實時表中。

我一直在做如下:

  1. 使用phpMyAdmin將活動表的副本導出/導入回開發數據庫。
  2. 使用C批處理文件將新數據加載到dev表中。
  3. 再次使用phpMyAdmin將更新的dev表的副本導出/導入回實時數據庫。

就一切而言,這一切都很好。

問題是這樣的:如果在活動表中刪除了一條記錄,則步驟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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM