作者grassboy2 (天才小胖子-活力花俏草兒)
看板Database
標題[SQL ] UPDATE有primary key的table?
時間Wed Jan 31 07:52:23 2007
小弟使用的是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