為什麼這篇sql delete多條件鄉民發文收入到精華區:因為在sql delete多條件這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者charleshu (Analog Engineer)看板Database標題Re: [SQL ...
※ 引述《licheer (HOPE)》之銘言:
: 找了很多刪除列的語法
: 大多是要給足夠的條件
: DELETE FROM Store_Information
: WHERE store_name = "Los Angeles"
: 例如我的資料有10筆,只要刪除第4筆
: 要用什麼語法可以指定刪除第4筆就好呢?
: 謝謝
SQL 的 Result Set在觀念上就是一個 Set,集合是無序的, 只保證它符合你篩選的條件.
SQL Server並不保證每筆資料列的順序, 且在連線有交易在跑的情況下, 你現在看到的任
何一筆資料都可能馬上別的Connection給刪除或修改了, 所以刪除第四筆常常是沒有意義
的, 除非你的Table是用作資料分析, 沒有其他交易同時執行, 但就算如此, 若是你的SQL
Statement 裡沒有Order敘述, 一般的SQL Server並不保證每次傳回的資料列會保持順序.
尤其是在多核心機器上, optimizer可能決定同時以兩個或以上的核心來處理你的Rquest,
而我們都知道在這種情況下,因為Race condition, 無法保證它們的執行順序.
假如你看到某筆資料, 它位於第4筆的位置, 而你想刪除它, 最建議的方法是, 把它每個
欄位的值都記下來, 以Delete FROM TABLE WHERE Field1=Value1 and Field2=Value2...
的方式來刪除紀錄, 請先開始一筆交易, 若Delete了0筆, 就知道這筆資料被別人異動過
了,若Delete了大於一筆,就是有別人修改或新增了一筆內容相同的紀錄, 根據你的程式
邏輯,決定要Commit或Rollback它.在實用上,建議你以這種方式來處理, 要不, 就只好建
議你多多備份, 以免刪除了預期之外的資料了.
--
Do not depend on others without effort...
當我年輕時,請教別人問題時常聽到上面那句話. 當時心裏偶而會有些小小抱怨.
當時間過去,我偶而會想到上面那句話, 心中十分感謝當初告訴我那句話的人.
當發現問題時,最有價值的不是問題的答案,
而是找到解決的方向,並在努力的過程裡具備解決問題的能力.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.236.108