接口數據防重


    系統應用之間交互,實際上就是各系統后台數據的處理,這里簡單記錄下數據防重的一些手段。

重復調用

    例如,用戶在商城下單后,商城系統向訂單系統下發訂單數據。訂單系統接收到數據后,插入數據庫。  

     偽代碼: 

orderDao.insert(Order);

 正常情況下,接收數據后保存。數據看起來沒有什么問題。但系統總會有一些異常情況。假如系統運行的某一天,商城系統由於一些情況,下發了多次訂單數據(接口重復調用),那么訂單系統就會接收到多次訂單數據,並插入數據庫,上面的插入代碼就不能保證訂單數據唯一了。

接口防重

    解決上面接口重復調用的情況有很多種,下面列舉下我工作中常見的:

1. 唯一索引

    給order表增加order_id唯一索引,同一個order_id不管插入多少次,數據庫只會存在一條。重復插入mysql報主鍵重復異常。

在存在唯一索引的情況下:

2. insert ignore into

   insert ignore表示,如果order表中已經存在相同的記錄,則忽略當前新數據,重復插入mysql不會報主鍵重復異常。

3. replace into 

replace into 插入數據的時候會檢查:

    3.1 如果表中已存在相同的order數據,則先刪除已存在的數據,然后插入新的數據

    3.2 如果不存在相同的order數據,則直接插入新數據

4. insert into on duplicate key update

當插入數據的時候:

    4.1 如果表中已存在相同的order數據, 則執行on duplicate key update后面的更新語句

    4.2 如果不存在相同的order數據,則直接插入新數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM