iT邦幫忙

0

資料表AUTO_INCREMENT ID出現規律性3倍數的情況

  • 分享至 

  • xImage

目前我正在寫一個程式,是將另外兩張資料表的特定資料抓出來並建立到新的表上,在單位的BETA及自己的開發區測試ID都正常照順序,後面資料數據也沒問題,但是轉移到UAT區域就發生以下情況
https://ithelp.ithome.com.tw/upload/images/20231019/20162136JSN27O3FxG.jpg
他後面資料經同仁確認是沒錯的,但就是新增的時候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次,但資料表重複數據不會記錄,每次都只到紀錄第三次事務創建的東西
如果大老有答案,可以建議我改進程式碼的方法或思路嗎?/images/emoticon/emoticon02.gif

補ordertype:
https://ithelp.ithome.com.tw/upload/images/20231019/201621368o94snYBuW.png

上面那張圖
除了OrderID以外
可以顯示一下OrderType嗎?
我忘記程式有用 createDate 排序
顯示 OrderType 沒什麼意義
不好意思...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2023-10-19 15:22:46

先確認:len(mds)(L)與資料庫筆數(D)
如果
1.L>D (or L=3D) : 問題在 golang 端
2.L=D:問題在 db.GoodPayGet().Debug().Create(&mds) 或 orm
3.L<D:那就見鬼了

brown125 iT邦新手 5 級 ‧ 2023-10-19 16:48:44 檢舉

我在開發區測試結果是(2.),但我資料庫連不到公司的UAT,所以看不到UAT那邊的情況

brown125 iT邦新手 5 級 ‧ 2023-10-19 16:50:36 檢舉

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

obarisk iT邦研究生 2 級 ‧ 2023-10-20 08:44:34 檢舉

這是自動建立的欄位。
查 gorm 的 id 規則
或是資料庫的自動遞增規則

0
fuzzylee1688
iT邦研究生 3 級 ‧ 2023-10-20 09:06:36

DB sequence nextval ??

我要發表回答

立即登入回答