2015-11-04 16 views
0
  1. 第一個問題,在同一行 兩列create table test (word varchar(255),value int);

我怎麼可以更新表的時候,我們有相同的word更新表時,表是分組並刪除使用MySQL

例如:<a,1> ,<b,1> , <a,1>會添加新行<a,2>並刪除這兩個<a,1>

2.第二個問題

如果表格有數百對,並且表格仍然分組(仍然插入),如何加快速度,我可以每隔1小時檢查一次嗎?並進行更新步驟?

MySQL或PHP代碼

+0

您的問題和標籤不清楚! 如果您的表格有:''。你會添加''然後刪除什麼? –

+0

@NguyễnHảiTriều刪除所有

回答

0

如果我們的目標是有一個有word獨特值,那麼我不會允許連續的插入與擺在首位的同一個字值的表,而只是更新現有的行。

我會通過添加一個UNIQUE KEY或PRIMARY KEY約束來強制執行word列的唯一性。例如:

CREATE UNIQUE INDEX `test_ux1` ON `test` (`word`) ; 

如果我想禁止NULL值word,我想補充NOT NULL到列定義。例如:

ALTER TABLE `test` MODIFY `word` VARCHAR(255) NOT NULL ; 

或者,我可以代替定義word是對錶的主鍵,而不是唯一的密鑰。這將強制唯一性以及不允許NULL值。


下面演示了這將如何工作,插入和更新行。

我們可以先嚐試插入一行。在這種情況下,該行已爲word列一個「A」的值:

INSERT INTO `test` (`word`, `value`) VALUES ('a','1') ; 

如果語句成功,我們已經插入一行。但是在word列中使用主鍵或唯一鍵時,這會引發「重複鍵」錯誤,因爲表中已存在值爲'a'的行。

當發生這種情況時,我們知道我們需要執行現有行的UPDATE。例如:

UPDATE `test` t 
    SET t.`value` = IFNULL(t.`value`,0) + '1' 
    WHERE t.word = 'a' 

MySQL提供的延伸部(INSERT ... ON DUPLICATE KEY UPDATE語句),將在單個語句中執行相同的操作:

INSERT INTO `test` (`word`,`value`) VALUES ('a','1') 
    ON DUPLICATE KEY 
    UPDATE `value` = IFNULL(`value`,0) + VALUES(`value`) 

這種設計似乎比執行插入更有效,插入隨後將通過刪除操作撤消的行。我寧願只有我需要的行,也不要添加額外的行,以後需要查詢和刪除。