MySql 更新時返回主鍵id

來源:互聯網
上載者:User

標籤:mysql   springmvc   mybatis   

最近做項目,遇到一個邏輯,就是在修改單條記錄時需要返回該記錄的id。

先說一下我的使用環境,springMVC+MyBatis,於是上度娘查了一下,將結果記錄一下,僅供日後參考和大家們共同探討

具體邏輯就是在多個條件下,包括一個巢狀查詢,對一條記錄進行更新,並返回該記錄的主鍵id,在這個查詢語句裡面用到一個變數update_id在執行更新語句的時候將本記錄的id重新賦值為自身的id,同時將自身的id賦值給updatge_id這個變數,最後返回這個變數,就是這個更新最後的目的。

SET @update_id := 0;UPDATE activity_prize_voucher apvSET apv.mobile = 18888888888, apv.state = 1, apv.exchange_time = NOW(), apv.id =(SELECT @update_id := id)WHEREapv.prize_id = 2AND apv.state = 0AND mobile IS NULLAND exchange_time IS NULL<span style="color:#ff0000;">AND(SELECTvv.exchangeCount <= 2000FROM(SELECTCOUNT(*)AS exchangeCountFROMactivity_prize_voucher apvvWHEREapvv.prize_id = 2AND apvv.state = 1AND DATE_FORMAT(NOW(), '%Y%m%d')= DATE_FORMAT( apvv.exchange_time, '%Y%m%d' ))AS vv)</span>LIMIT 1;SELECT@update_id;


在 Mapper.xml內的標籤使用為select標籤

<select id="exchangeVoucher" parameterType="hashmap" resultType="java.lang.Integer">   SQL</select>


在java Dao內方法為:

int exchangeVoucher(Map<String, Object> queryParams);

就這麼簡單,這個功能就初步完成,下面對這個邏輯進行最佳化調整

    =================分割線=========================

好,在華麗麗的分割線下面咱們在討論一下上面那段sql裡面紅顏色的,在MySQL裡面如果要在upadte和delete裡面用巢狀查詢一般是不行的,但是如果你將這個巢狀查詢AS為一個對象,然後在對這個對象進行查詢應該就可以了。

但是,在這裡MySQL鎖定WHERE條件掃描過的所有索引記錄,在高並發的時候就會導致紅色語句出現死結現象,那麼問題來了,如何控制紅色字型的條件,由於紅色地區內的語句只是用來統計一定條件下的數量的,所以只能通過代碼邏輯進行獨立控制。

最後將紅色字型代碼捨去,在執行更新語句之前進行邏輯判斷來控制。

如果哪位達人有更好的方法,希望給我反饋,謝謝。我這裡只是拋磚引玉。

MySql 更新時返回主鍵id

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.