iT邦幫忙

0

MySQL 的 DELETE、LIMIT、OFFSET 結合使用

  • 分享至 

  • xImage

各位大神安安 :
廢渣一般的我又遇到問題了!我在 MySQL 命令列運行如下指令 OK

SELECT * FROM brands LIMIT 1 OFFSET 8;

但是我運行如下指令卻會報錯

DELETE FROM brands LIMIT 1 OFFSET 8;

難道 DELETE 真的無法和 LIMIT、OFFSET 結合使用嗎?我有做一定程度的 google 搜尋但是得到的答案都不行,各位大神請救救我吧!

看更多先前的討論...收起先前的討論...
powerc iT邦研究生 5 級 ‧ 2023-08-14 17:13:19 檢舉
為何不用where條件
TO [powerc] : 原本我是希望我的資料表有彈性,不一定需要設定 id 欄位,但現在看起來 LIMIT 和 OFFSET 無法結合使用,乾脆我用 WHERE 比對 id 好了!
https://dbfiddle.uk/3aMmxpPT
先把你的table 建立好,不然是要大家通靈喔.
https://dev.mysql.com/doc/refman/8.0/en/delete.html
MySQL Delete 只能 limit , 要再複雜一點要用CTE搭配 .
還有一個很重要且基本的觀念, 關聯式資料庫 table 資料本身無序,
操作時要人類指定 order by, 你這樣做是不保證每次都會同樣結果的.
所以table 裡面通常會指定至少一個 獨一無二的 , 可以是數字,或是其他.
這樣才好做指定的操作.
pickuse iT邦新手 3 級 ‧ 2023-08-14 18:05:09 檢舉
請問你是想要「隨機跳過八筆然後刪除一筆」的意思嗎?
TO [一級屠豬士] : 其實弱弱的我有從 GitHub 下載資料庫並且此資料庫有獨一無二的 id,所以要用 id 刪除資料是沒問題的,我只是求好心切想用酷炫功能。大神貼的網址我有看完,我覺得學技術還是要先看過中文書再用英文手冊補充,像我書上講的比對英文都看得懂,但 Partition 因為唸中文書時不認真所以英文就霧煞煞了。
TO [pickuse] : 弱弱的我原本是想叫 User 指定一列然後用 LIMIT 1 OFFSET “列數”刪掉特定的列,現在改成叫 User 輸入 id 再刪除,其實都差不多啦!(反正 LIMIT 無序也做不到我要的功能)
TO [Everyone] : 請原諒弱弱的我說句題外話!剛剛在網路爬文偶然發現有些學生大二就在學 PHP 的 _POST 和 _GET,看來我低估了程式補習班也高估了我自己,當然沒真的去補過習實際狀況也不太清楚~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
shruti07
iT邦新手 5 級 ‧ 2023-08-14 21:22:52

您面臨的問題與 DELETE 與 LIMIT 和 OFFSET 的組合無關,而是與 DELETE 語句的語法有關。

在 MySQL 中將 LIMIT 和 OFFSET 與 DELETE 語句一起使用的正確語法與您的嘗試略有不同。 這是正確的語法:

DELETE FROM brands ORDER BY some_column LIMIT 1 OFFSET 8;

將 some_column 替換為要用於對 Brands 表中的行進行排序的適當列。 這是必要的,因為與 SELECT 語句不同,DELETE 語句本質上沒有順序的概念

看更多先前的回應...收起先前的回應...

TO [shruti07] : 其實弱弱的我看網路教材說在 DELETE 時加上 LIMIT 1 是個好習慣,因為這樣能避免一次刪掉太多東西,我從 GitHub 下載的資料庫每一個表都有 id,所以我會在秀作品的時候直接輸入 id 模擬刪資料。感謝大神的回答!弱弱的我因為換領域目前功力跟程式補習班結訓生差不多,頂多就是以前做過韌體比較習慣 code,一起加油吧!

網路教材說在 DELETE 時加上 LIMIT 1 是個好習慣,因為這樣能避免一次刪掉太多東西....
這是錯誤觀念!! 要就加上過濾條件,刪應該刪的.
刪錯的話,即使是一筆,也是不對的.
你在銀行裡的存款,要是被刪了,這樣可以嗎?

少看一些有的沒的網路教材,現在很多都不懂又亂教.

TO [一級屠豬士]:大神說的是!不過坦白講我做『自認』程式設計補習班等級的作品的確有很多地方取材於網路,但是基礎觀念的架構還是看歐萊禮的書慢慢建立的。在 WHERE 加上過濾條件當然是正確的,聽大神一說我也覺得頗奇怪,資料多刪一筆和多刪十筆都是錯,即使加上 LIMIT 限制刪錯的數量但錯就是錯,過濾條件還是最重要的吧!

就先把手頭上的書,好好練習. 先模仿,再慢慢修改.
加油!

TO [一級屠豬士]:感謝大神的勉勵,程式都是從模仿開始的。歐萊禮的書弱弱的我覺得還不錯,另外還有買『MySQL完全攻略:資料庫開發與效能調教』以及『MySQL完全攻略:管理與維護』,那兩本是大陸網易公司的工程師寫的,計劃找到工作後當課外書來看,因為弱弱的我想做後端。

那個不推薦.

TO [一級屠豬士]:謝謝大神的意見。

0
海綿寶寶
iT邦大神 1 級 ‧ 2023-08-14 21:39:55

不知道你現在是看什麼書/網頁在學 MySQL
MySQL官網文件為例
DELETE 的語法只有使用 LIMIT 的可能性
沒有什麼 LIMIT 搭配 OFFSET

就我印象中的 SQL 教學資料
SELECT/UPDATE/INSERT/DELETE 通常第一個學的會是 WHERE
而不是什麼 LIMIT , OFFSET
/images/emoticon/emoticon10.gif

TO [海綿寶寶] : 大神您好!弱弱的我之前看的是歐萊禮的『PHP、MySQL 與 JavaScript 學習手冊』;目前正在做程式補習班等級的作品;搞定作品後要 K『RESTful Web Client 技術手冊:不隨時間變化可重複運行的設計方法』(也是歐萊禮),最後要實戰 GitHub 專案。還記得弱弱的我第一份工作是相機韌體 UI 設計,code 裡面有一堆 flag (比如要把九宮格改成六宮格就把 define 裡的 9 改成 6),所以我想藉由鑽研 GitHub 專案培養我看 PHP 和 JavaScript code 的能力,那個專案叫 onlineshop,但是 GitHub 上也有一堆跟她同名的專案所以我忘記是哪個了。

歐萊禮的書我沒有意見
只有建議你先把時間花在書上有寫的技術
等到都學會了
再去研究書上沒寫的技巧

TO [海綿寶寶] : 感謝大神的建議。其實弱弱的我也是有把書看過一遍,但是不至於到背起來的程度,呵呵~

我要發表回答

立即登入回答