Re: [SQL ] 恭賀開板順便發問

看板Database (資料庫)作者 (=_=)時間18年前 (2006/07/18 11:27), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串14/14 (看更多)
※ 引述《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

07/19 02:36, , 1F
必須再補充: 尾端再加 ORDER BY pkID,因為pkID可能沒有順序
07/19 02:36, 1F
文章代碼(AID): #14l5K7ji (Database)
討論串 (同標題文章)
文章代碼(AID): #14l5K7ji (Database)