2015-12-27 60 views
0

我有一個mysql表,我(主),s和g列。我有2個疑問:mysql - 在1條語句中組合2個查詢(插入和選擇)?

INSERT INTO usertable (i, s, g) VALUES('1', '2', '5') ON DUPLICATE KEY SET s=(s*g+'2')/(g+'5'), g=g+'5'; 

SELECT s FROM usertable WHERE i='1' LIMIT 1 

是否有可能同時擁有在1個查詢查詢?基本上想減少數字DB查詢。

感謝

+0

S表示得分表的得分? – devpro

+0

是的,更新了我的問題。謝謝 – user1517108

+2

不,沒有辦法減少數據庫查詢的數量。但是,如果兩個操作在同一個事務中執行(並且使用InnoDB等事務引擎存儲「usertable」),則可以以原子方式執行這兩個操作。 – eggyal

回答

1

可以ON DUPLICATE KEY UPDATE(IODKU),接着是選擇,即,2個語句執行INSERT。或者你可以將它們包裝在一個存儲過程中並製作一個。也許不是你想聽到的答案。

至於IODKU,你自然需要一個唯一的鍵來方便觸發UPDATE部分的衝突。該唯一密鑰可以是下列之一:

  • 主鍵(單柱或複合)
  • 非主鍵(單柱或複合材料)與unique關鍵字

注意,一個更新插入衝突可能發生在多個唯一鍵上。它所需要的只是觸發UPDATE部分的唯一鍵衝突之一。

單個呼叫可以與一個來實現,例如以一個存儲過程:

call myStoredProcName(param1,param2); 

此外手冊頁面的引用:

+1

是的,我認爲存儲過程是最好的方法。謝謝。 – user1517108

+0

聽起來不錯老大:P – Drew