MySQL提供了一種自動增加記錄ID的機(jī)制。這可以用于許多目的,但是我需要能夠使用ORACLE提供的序列。顯然,為此目的創(chuàng)建表是沒有意義的。解決方案應(yīng)該很簡單:1)創(chuàng)建一個(gè)表以托管所有需要的序列,2)創(chuàng)建一個(gè)增加特定序列的值并返回新值的函數(shù),3)創(chuàng)建一個(gè)返回序列當(dāng)前值的函數(shù)。從理論上講,它看起來很簡單...但是...當(dāng)增加一個(gè)序列的值時(shí)(與nextvalOracle中的相同),您需要阻止其他會話執(zhí)行此操作(甚至獲取當(dāng)前值),直到更新完成。兩個(gè)理論選擇:a-使用UPDATE語句,一次即可返回新值,或者b-將表鎖定在UPDATE和SELECT之間。不幸的是,MySQL似乎不允許在函數(shù)/過程中鎖定表,并且在嘗試在單個(gè)語句(例如UPDATE ... RETURNING ...)中完成整個(gè)操作時(shí),必須使用@ -type變量,這些變量必須存在功能/程序的完成。有人對此有想法/可行的解決方案嗎?謝謝。
2 回答

慕少森
TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
我懂了。我通常會同意您的意見(例如,insert / updates / selects屬于PROCEDURES),只是在這種情況下,它將是一組通用服務(wù)(即,創(chuàng)建序列,刪除序列,獲取序列當(dāng)前值,獲取序列下一個(gè)值等) ),因此(至少以我的口味)它具有一系列功能。就像我說的,有品味。非常感謝您的推薦。當(dāng)然投票
添加回答
舉報(bào)
0/150
提交
取消