看板 Database 關於我們 聯絡資訊
小弟使用的是MySQL… 有一個table他記錄了a年b班c號同學的成績為d 然後我把a b c合起來設一個primary key… 以下是table的內容 a b c d 1 1 1 95 1 1 2 93 1 1 3 79 1 1 4 80 1 1 5 44 1 1 6 100 : : : table的特性是「在同樣的a和b下,c一定會從1開始遞增」 今天…我想把a=1,b=1,c=3給刪了… 為了要讓table的c值合理化… 我必須讓 a=1,b=1, c>3的都減1 所以很直觀的會下 UPDATE `table` SET `c` = (`c`-1) WHERE `a`=1 AND `b` = 1 AND `c` > 3 可是…有時候table的資料排序沒有那麼規律… 所以`c`的值在更新有時候會產生「#1062 - Duplicate entry」的錯誤 所以…要刪除的話…就會變成要一條一條的下指令… 從c=4、c=5、c=6逐筆更新… 可是如果以後table裡的資料a=1、b=1、c有1~100… 然後我刪了c=1那筆記錄… 不就要再下99道指令修正?感覺有點效率不佳… 有辦法指定MySQL系統從c最小的開始整批更新嗎? ------------------------------------------------------ 另外想要問一下…當我下1道更新99筆資料的Query… 他的執行效率比起 我下99道更新1筆資料的Query… 前者的效率有比較高嗎? 謝謝大家回答了><~ -- ╔作者 grassboy2 來自 ptt.cc 的怒吼! P_GrassboyWebBBS版【http://WebGrassboy.twbbs.org Design By Grassboy@MDS 白日夢工作室 ╚─你現在還以為,瀏覽器不能打逼嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.214.146
MugenPower:為什麼一定要往前移? @.@ 01/31 10:25
grassboy2:耶…問的好…我一開始只是想直觀的從c的值記錄那個號碼 01/31 12:28
grassboy2:在a,b都一樣的資料中是第c大,以這個例子是學生轉學了 01/31 12:34
grassboy2:座號就往前面遞補降子^^" 01/31 12:34
Adonisy:用好朋友,temptable來做吧.... 01/31 13:56
grassboy2:喔喔?如果用temptable的話…效率有比較高嗎? 01/31 14:29
Adonisy:沒有....XD但這是你的情境影響效能.... 01/31 17:01
noguest:下1道更新99筆資料的Query 的效率會比較高 02/01 16:45