作者razor (=_=)
看板Database
标题Re: [SQL ] 恭贺开板顺便发问
时间Tue Jul 18 11:30:02 2006
※ 引述《razor (=_=)》之铭言:
: ※ 引述《forgmonkey (悲情城市之悲情程式猿)》之铭言:
: : mysql下 primary key可以设定auto increase
: : 他实作方式是会纪录一个数字
: : 每次Insert一笔资料就会拿这个数字当primary key 并且递增之
: : 但是我遇到一个问题... 今天我新增10个资料
: : 就有主键1~10的这几笔资料
: : 然後删掉4 ,6, 剩下8笔
: : 然後再新增一笔 我希望他会成为主键4而不是11
: : 能够在SQL的语法那边就解决掉嘛?
: : 还是必须每次插入都要用程式检查最小的空栏是哪一个?
: : 不过我想这种方式因该load太大吧?
: 这问题可简化为这样的问题:试查询缺漏号之前的最大流水号.
: 以你的例子来说,就是用一个查询找出(3,5)这组流水号集合.
: 这组流水号集合分别加1,变成(4,6),就是可填补的空缺号码.
: 上述查询可这样做:
: Select pkID As x From table1
: Where (Select count(*) From table1 Where pkID = x + 1) = 0
必须承认这样做是错的,
正确的做法是,
SELECT pkID AS x FROM table1 AS a
WHERE (SELECT count(*) FROM table1 AS b WHERE b.pkID = a.pkID + 1) = 0
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.137.13.66
1F:→ razor:必须再补充: 尾端再加 ORDER BY pkID,因为pkID可能没有顺序 07/19 02:36