1. 程式人生 > >介面資料防重

介面資料防重

    系統應用之間互動,實際上就是各系統後臺資料的處理,這裡簡單記錄下資料防重的一些手段。

重複呼叫

    例如,使用者在商城下單後,商城系統向訂單系統下發訂單資料。訂單系統接收到資料後,插入資料庫。  

     虛擬碼: 

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資料,則直接插入新資料