2013-02-12 114 views
4

是否有人可以解釋(或指向正確的方向)如何將多行從一個表移動到另一個表,並根據設置的條件從原始表中移除該行?MySQL:將整行從一個複製到另一個並刪除原始

我明白

INSERT INTO table2 SELECT * FROM table1 

將數據從一個表複製到另一個,但我需要再取出原稿。之所以建議加快對錶格的查詢,是因爲我應該將所有冗餘數據(結束,過期,超過3個月的產品)從主表格移動到另一個表格。有一點背景,我有一張桌子可以放置產品,有些產品已經過期,但產品仍然需要使用。大約有50,000種產品已經過期,2,000種產品已經過期。有一個狀態列(int 1 = active,2 = expired等)來確定在前端顯示的內容。

我想這個職位是兩個問題:

  1. 有沒有更好的辦法來加快產品表的查詢,而不刪除過期的項目?
  2. 如果沒有,如何從一個表中的行移動到另一個

很多很多的感謝!

回答

6

INSERT INTO表2(column_name1,column_name2)SELECT column_name1, column_name2從表1 WHERE(其中這裏子句)

DELETE FROM表1 WHERE(where子句這裏)

來源爲上述:mysql move row between tables

+0

很好。簡單!謝謝 – puks1978 2013-02-12 21:53:50

4

表中50,000條記錄確實不是那麼多。如果您遇到性能問題,我會查看您的查詢和索引以幫助加快性能。由於這些過期的記錄仍然需要被訪問,因此要維護多個表可能會更困難。

但是,要按照您的要求將數據從一個表移動到另一個表,您只需要運行2個不同的語句。假設您想要移動不活動的產品:

INSERT INTO ProductsBackup SELECT * FROM Products WHERE Status <> 1 
DELETE FROM Products WHERE WHERE Status <> 1 

如果您的列上有標識,則最好指定列名稱。但假設ProductId是標識,那麼請小心將它們移動到不同的表中,因爲您可能不想丟失原始標識,因爲它可能指向其他表。

祝你好運。

相關問題