[SQL ] UPDATE有primary key的table?

看板Database (資料庫)作者 (天才小胖子-活力花俏草兒)時間18年前 (2007/01/31 07:52), 編輯推噓8(800)
留言8則, 4人參與, 最新討論串1/3 (看更多)
小弟使用的是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

01/31 10:25, , 1F
為什麼一定要往前移? @.@
01/31 10:25, 1F

01/31 12:28, , 2F
耶…問的好…我一開始只是想直觀的從c的值記錄那個號碼
01/31 12:28, 2F

01/31 12:34, , 3F
在a,b都一樣的資料中是第c大,以這個例子是學生轉學了
01/31 12:34, 3F

01/31 12:34, , 4F
座號就往前面遞補降子^^"
01/31 12:34, 4F

01/31 13:56, , 5F
用好朋友,temptable來做吧....
01/31 13:56, 5F

01/31 14:29, , 6F
喔喔?如果用temptable的話…效率有比較高嗎?
01/31 14:29, 6F

01/31 17:01, , 7F
沒有....XD但這是你的情境影響效能....
01/31 17:01, 7F

02/01 16:45, , 8F
下1道更新99筆資料的Query 的效率會比較高
02/01 16:45, 8F
文章代碼(AID): #15lzevUR (Database)
文章代碼(AID): #15lzevUR (Database)