2011-04-24 74 views
1

我不認爲這是可能的,因爲我找不到任何東西,但我想我會在這裏檢查以防萬一我不尋找正確的東西。在mysql中更新查詢中的多個集合和where子句

我有一個設置表在我的數據庫有兩列。第一列是設置名稱,第二列是值。

我需要同時更新所有這些。我想看看是否有在同一時間一個查詢類似以下

UPDATE table SET col1='setting name' WHERE col2='1 value' AND SET col1='another name' WHERE col2='another value'; 

我知道上面是不是一個正確的SQL格式來更新這些值的方法,但是這是諸如此類的事情,我會喜歡這樣做的人想知道是否有另一種方法可以完成此操作,而不必爲要更新的每個設置執行單獨的SQL查詢。

感謝您的幫助。

回答

1

我決定一次性使用多個查詢。所以代碼會是這樣

UPDATE table SET col2='value1' WHERE col1='setting1'; 
UPDATE table SET col2='value2' WHERE col1='setting1'; 

等 等

我剛剛做了一個測試,我插入1500年記錄到數據庫中。在不啓動數據庫事務的情況下執行該操作,花費35秒鐘,清空數據庫並再次執行該操作,但首先啓動事務,然後插入第1500條記錄完成事務並花費1秒時間,因此definetely似乎是在執行在一個數據庫交易是一條路。

+0

我徘徊這是否對數據庫的性能有任何影響與在單個語句中做它? – Sam 2014-08-17 07:16:31

+0

我想它可能會稍微慢一點,因爲它必須在每個語句之間進行提交,但我認爲它會很小。至少我沒有注意到任何性能問題 – Boardy 2014-08-18 07:33:03

+0

是的,我在考慮更多的環境,我在哪裏Web服務器/數據庫位於不同的服務器上工作,所以通信延遲比如果它用在Web /數據庫位於同一物理硬件上的環境。 – Sam 2014-08-18 08:11:40

4

您可以使用INSERT INTO .. ON DUPLICATE KEY UPDATE更新具有不同值的多行。

你確實需要一個唯一索引(如主鍵)使「重複鍵」 -part工作

例子:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) 
    ON DUPLICATE KEY UPDATE b = VALUES(b), c = VALUES(c); 

-- VALUES(x) points back to the value you gave for field x 
-- so for b it is 2 and 5, for c it is 3 and 6 for rows 1 and 4 respectively (if you assume that a is your unique key field) 

如果你有一個特定的情況下,我可以給你確切的查詢。

+0

不錯的解決方案!你碰巧知道這是否比多個更新性能更好? – hardsetting 2013-12-14 22:59:05

0

如果您想以原子形式運行,則需要運行單獨的SQL查詢並使用事務。

0
UPDATE table SET col1=if(col2='1 value','setting name','another name') WHERE col2='1 value' OR col2='another value' 
0

@Frits凡坎彭,

的INSERT INTO ..上的重複對我的作品。 我這麼做了很多年,當我想從Excel導入更新超過一千個記錄時。

這個技巧的唯一問題是,當沒有記錄要更新時,而不是忽略,此方法插入一條記錄,在某些情況下,這是一個問題。然後我需要插入另一個字段,然後導入後,我必須刪除所有插入的記錄,而不是更新。

2
UPDATE table 
    SET col2 = 
     CASE col1 
      WHEN 'setting1' 
      THEN 'value' 
      ELSE col2 
     END 
    , SET col1 = ... 
    ...