[請益] 資料庫裡被刪除的資料?

看板PHP作者 (雪爐喵)時間8年前 (2017/03/02 21:57), 編輯推噓1(1031)
留言32則, 6人參與, 最新討論串1/1
id name relationship 1 阿貓 小王 2 阿狗 小三 3 阿摸 砲友 4 咩咩 姊姊 5 汪汪 哥哥 ------------------ 想請教一下,假如我刪除了中間的第2-4個, id是auto increment,那資料在插入的時候還是往後加 變成789... 這樣會不會造成什麼問題呢?例如說讀頁碼的時候.. 遇到這類情況大家會怎麼做呢? 有辦法讓它自動補進之前被刪的id嗎? 新手上路 請多指點 感激感激 ~~ -- 古裝美女大全~快收編(<ゝω・) ☆ http://pinkjelly.org/archives/10 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.152.182 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1488463027.A.644.html

03/02 22:44, , 1F
除非真的有很必須的連號要求, 不然刪除的缺號就給他缺
03/02 22:44, 1F

03/02 22:44, , 2F
很多時候這個 id 並不具有數值意義而只是一個唯一代號而已
03/02 22:44, 2F

03/02 22:45, , 3F
反正資料庫在存資料時不是根據你的 id 決定怎麼存的
03/02 22:45, 3F

03/02 22:46, , 4F
缺號基本上無關緊要
03/02 22:46, 4F

03/03 02:48, , 5F
ID 缺號不影響頁碼,根據頁碼讀取資料是看實作方式。
03/03 02:48, 5F

03/03 02:49, , 6F
通常是根據頁碼換算出 Offset 去取資料
03/03 02:49, 6F

03/03 02:51, , 7F
例如每頁顯示 20 筆資料,要讀取第 3 頁的資料,就會是
03/03 02:51, 7F

03/03 02:53, , 8F
offset = 20 * (3 - 1) = 40,從第40筆資料之後取得20筆
03/03 02:53, 8F

03/03 02:54, , 9F
SELECT * FROM user LIMIT 20 OFFSET 40
03/03 02:54, 9F

03/03 02:55, , 10F
等同 SELECT * FROM user LIMIT 40, 20
03/03 02:55, 10F

03/03 11:27, , 11F
不會有什麼問題,也不建議你補。
03/03 11:27, 11F

03/03 11:28, , 12F
當然你可以用另外一個表,刪除時把空號加進去,新增時
03/03 11:28, 12F

03/03 11:29, , 13F
讀出一個空號用掉,同時刪掉,看你想不想做。
03/03 11:29, 13F

03/03 11:30, , 14F
如前面所述,有db幫忙,重新編號或頁數是最簡單的事情
03/03 11:30, 14F

03/03 21:40, , 15F
啊, 看到推文回答大概猜到你的盲點在哪了
03/03 21:40, 15F

03/03 21:41, , 16F
基本上還是那個「id 不具有數值意義, 僅是唯一代號」的概念
03/03 21:41, 16F

03/03 21:41, , 17F
不過我少講了一個性質, 這個 id 是「有序的唯一代號」
03/03 21:41, 17F

03/03 21:42, , 18F
列出資訊編頁時並不是照數值去切頁, 而是照順序去切頁
03/03 21:42, 18F

03/03 21:42, , 19F
所依據的就是這個「有序的唯一代號」的順序
03/03 21:42, 19F

03/03 21:43, , 20F
反應在 SQL 指令上就是上面推文提的 limit / offset
03/03 21:43, 20F

03/03 21:43, , 21F
依照某順序排好 (order by) 之後列出第幾名 (limit/offset)
03/03 21:43, 21F

03/03 21:44, , 22F
因為 id 值跟實際存放位置沒有關連, 不連號不影響這些操作
03/03 21:44, 22F

03/03 21:47, , 23F
你可以思考一下: 當進行有條件的查詢時, id 值就不可能當做
03/03 21:47, 23F

03/03 21:48, , 24F
列表編頁的依據了, 能依據的只有列表的第 N 名
03/03 21:48, 24F

03/03 21:48, , 25F
這個「第 N 名」概念正是 limit / offset 所代表的
03/03 21:48, 25F

03/05 12:14, , 26F
結果問的人不見了
03/05 12:14, 26F

03/08 15:35, , 27F
通常都是會跟其他表做關聯性的資料表, 雖然只是ID,
03/08 15:35, 27F

03/08 15:36, , 28F
建議還是用假性刪除會比較好, 多年開發的經驗
03/08 15:36, 28F

03/10 01:34, , 29F
有我已經參考好上面的回答把分頁寫好了!!大感激QQ
03/10 01:34, 29F

03/10 01:35, , 30F
雖然是去查詢一些網站類似的script來寫的
03/10 01:35, 30F

03/10 01:35, , 31F
發現有的書把分頁寫得又臭又長 *-* 這個方法簡單多了
03/10 01:35, 31F

03/10 01:36, , 32F
謝謝大家m(__ __)m 我想先直接無視id了
03/10 01:36, 32F
文章代碼(AID): #1Ok2IpP4 (PHP)
文章代碼(AID): #1Ok2IpP4 (PHP)