作者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
1F:推 MugenPower:为什麽一定要往前移? @.@ 01/31 10:25
2F:推 grassboy2:耶…问的好…我一开始只是想直观的从c的值记录那个号码 01/31 12:28
3F:推 grassboy2:在a,b都一样的资料中是第c大,以这个例子是学生转学了 01/31 12:34
4F:推 grassboy2:座号就往前面递补降子^^" 01/31 12:34
5F:推 Adonisy:用好朋友,temptable来做吧.... 01/31 13:56
6F:推 grassboy2:喔喔?如果用temptable的话…效率有比较高吗? 01/31 14:29
7F:推 Adonisy:没有....XD但这是你的情境影响效能.... 01/31 17:01
8F:推 noguest:下1道更新99笔资料的Query 的效率会比较高 02/01 16:45