我有一個關係表,表看起來是這樣的插入條目只有一次
------------------------
| client_id | service_id |
------------------------
| 1 | 1 |
| 1 | 2 |
| 1 | 4 |
| 1 | 7 |
| 2 | 1 |
| 2 | 5 |
------------------------
我有新的權限,我需要添加一個名單,我在做什麼現在的問題是,例如,如果我有ID爲1添加新權限的客戶,我做
DELETE FROM myTable WHERE client_id = 1
INSERT INTO ....
有沒有更有效的辦法,我只能刪除那些我以後不會插入,和只添加了新的?
你正在刪除的主鍵,反正這麼快,我真的不會擔心它。 否則,您必須將您要插入的service_id列表放在一起,並將其作爲where條件添加到刪除中,如下所示: DELETE FROM myTable WHERE client_id = @myId AND service_id NOT IN(@ serviceIds) 這可能需要更多的內存/時間,而不僅僅是刪除。 – robertvoliva 2012-03-29 14:51:06
@robertvoliva:在主鍵上查找速度非常快,但刪除項目可能不會。數據庫服務器試圖根據主鍵保持整個表的排列順序。當你刪除項目時,數據庫必須確定它是否需要重構它如何存儲數據。有點像從書架上拿下一堆書:在某個時候,圖書管理員必須花時間轉移所有書籍,所以你最終不會得到大部分空的書架。 – StriplingWarrior 2012-03-29 15:04:37