目前我正在寫一個程式,是將另外兩張資料表的特定資料抓出來並建立到新的表上,在單位的BETA及自己的開發區測試ID都正常照順序,後面資料數據也沒問題,但是轉移到UAT區域就發生以下情況
他後面資料經同仁確認是沒錯的,但就是新增的時候ID是3的倍數跳著,以下是我create()的golang程式碼
var mds []model.USDTOrders
//dataMap := make(map[string]USDTOrderAll)
for _, payOrder := range payOrders {
mds = append(mds, model.USDTOrders{
OrderID: payOrder.OrderID,
OutOrderID: payOrder.OutOrderID,
PartnerID: payOrder.PartnerID,
OrderType: "pay",
Amount: payOrder.Amount,
Actual: payOrder.Actual,
Quantity: payOrder.Quantity,
Fee: payOrder.Fee,
FeeRate: payOrder.FeeRate,
Price: payOrder.Price,
PriceDiff: payOrder.PriceDiff,
PriceDiffRate: payOrder.PriceDiffRate,
Owner: payOrder.Owner,
CreateDate: payOrder.CreateDate,
})
}
for _, receiveOrder := range receiveOrders {
mds = append(mds, model.USDTOrders{
OrderID: receiveOrder.OrderID,
OutOrderID: receiveOrder.OutOrderID,
PartnerID: receiveOrder.PartnerID,
OrderType: "receive",
Amount: receiveOrder.Amount,
Actual: receiveOrder.Actual,
Quantity: receiveOrder.Quantity,
Fee: receiveOrder.Fee,
FeeRate: receiveOrder.FeeRate,
Price: receiveOrder.Price,
PriceDiff: receiveOrder.PriceDiff,
PriceDiffRate: receiveOrder.PriceDiffRate,
Owner: receiveOrder.Owner,
CreateDate: receiveOrder.CreateDate,
})
}
for i := 0; i < len(mds)-1; i++ {
for j := 0; j < len(mds)-1-i; j++ {
if mds[j].CreateDate.After(mds[j+1].CreateDate) {
mds[j], mds[j+1] = mds[j+1], mds[j]
}
}
}
db.GoodPayGet().Debug().Create(&mds) //批量創建
我是用gorm套件作業,我自己是推測是併發嗎,因為我進不到UAT資料庫裡面看實際情況?
感覺是UAT那邊每次都連續創立3次,但資料表重複數據不會記錄,每次都只到紀錄第三次事務創建的東西
如果大老有答案,可以建議我改進程式碼的方法或思路嗎?
補ordertype:
先確認:len(mds)
(L)與資料庫筆數
(D)
如果
1.L>D (or L=3D) : 問題在 golang 端
2.L=D:問題在 db.GoodPayGet().Debug().Create(&mds) 或 orm
3.L<D:那就見鬼了
我在開發區測試結果是(2.),但我資料庫連不到公司的UAT,所以看不到UAT那邊的情況
https://stackoverflow.com/questions/23022574/why-the-auto-increment-id-does-not-increase-one-by-one-how-to-set-it/23022736#23022736
我是猜說我們UAT是不是有上面這個設定,但同仁是希望我看看create()有沒有問題XD
這是自動建立的欄位。
查 gorm 的 id 規則
或是資料庫的自動遞增規則