MS SQL入门基础:删除数据
11.2.1 DELETE 語法
DELETE 語句用來從表中刪除數據,其語法為:
各參數說明如下:
FROM此參數為可選選項,用于連接DELETE 關鍵字和要刪除數據的對象名稱。 table_name
指定要刪除數據的表。 WITH ( [...n])
指定一個或多個目標表允許的表提示。 view_name
指定用于刪除數據的視圖。 rowset_function_limited
行集合函數限制,即使用OPENQUERY() 或OPENROWSET() 函數。 FROM
指定一個額外的FROM 子句。這是DELETE 命令在Transact-SQL 語言中的擴展,它允許同時刪除多個表中的數據。其所含的參數包括join_table、 join_type 等,與第10 章“數據查詢”中FROM 子句中所講的一致。 WHERE
指定限制數據刪除的條件。如果不指定WHERE 子句,就會刪除表中的所有數據。在 WHERE 子句中指定兩種形式的刪除操作。一種是搜索刪,除即使用搜索條件來限定要刪除的數據行:另一種是定位刪除,即使用CURRENT OF 子句來指定一個游標,刪除操作會在游標的當前位置產生。定位刪除比搜索刪除更精確。 GLOBAL
說明要使用的游標是全局游標。如果不使用此選項,而又存在一個全局游標和一個局部游標同名的情況時,系統認為所選擇的游標是局部游標。 cursor_name
指定打開的游標名稱。此游標必須是允許更新的。 cursor_variable_name
指定游標變量的名稱。此游標變量必須是允許更新的。 OPTION ( [,...n] )
請參見第10 章“數據查詢”中OPTION 子句中所講述的參數。 table_hint
表提示用于指定一個表的掃描計劃,即將要用于查詢優化器的一個或多個索引,或一個用于檢索數據的鎖定方法。此選項一般來說不必使用,查詢優化器會自動選擇一個最優的執行方案。各表提示之間應使用逗號隔開。 INDEX(index_val [,...n])
指定索引提示,即當執行命令時由SQL Server 使用的索引的名稱或ID 號。每個表只能指定一個索引提示。在表提示中最多可以指定250 非簇索引。 FASTFIRSTROW
等價于OPTION (FAST 1) ,即對第一行返回數據采用查詢優化。 HOLDLOCK
一般情況下,當執行SELECT 命令時,SQL Server 會在選取數據的過程中對該數據所屬的數據頁設定一個共享鎖(Shared Lock, 關于鎖的介紹請參見本章后部分)。當SQL Server 讀到下一個數據頁的數據時,上一個數據頁的共享鎖就會被解除。但如果使用了 HOLDLOCK 選項,則在整個SELECT 命令執行的過程中設定的共享鎖會一直存在。此選項不能在帶FOR BROWSE 子句的SELECT 語句中使用。此選項等價于SERIALIZABLE 選項。 NOLOCK
一般情況下,當執行SELECT 命令時,SQL Server 會在選取數據的過程中對該數據所屬的數據頁設定一個共享鎖(Shared Lock, 關于鎖的介紹請參見本章后部分)。但如果使用了NOLOCK 選項,則SQL Server 不會指定共享鎖,而且不管其它用戶是否正在更改所讀取的數據,SELECT 命令仍然可以讀取數據。因此,使用此選項可能會讀取到其它用戶尚未提交的數據。此選項等價于READUNCOMMITTED 選項。 PAGLOCK
指定在SELECT 命令執行時使用對數據頁做共享鎖。這是SQL Server 的內定方式。 READCOMMITTED
指定數據掃描執行時使用與運行在READ COMMITTED 孤立級上的事務相同的鎖語義。即SELECT 命令不會返回尚未提交的數據。 READPAST
跳過目前被鎖定的行。此選項只用于在事務運行在READ COMMITTED 孤立級上的情況下。 READUNCOMMITTED
此選項等價于NOLOCK 選項。 REPEATABLEREAD
指定數據掃描執行時使用與運行在REPEATABLE READ 孤立級上的事務相同的鎖語義。即用SELECT 命令讀取的數據在整個命令執行過程中不會被更改。此選項會影響系統的效能,非必要情況最好不用此選項。 ROWLOCK
指定使用共享的行數據鎖,即使用行級別鎖定。 SERIALIZABLE
此選項等價于HOLDLOCK 選項。 TABLOCK
指定用SELECT 命令讀取數據時對所選取的表的全部數據做鎖定,直到整個命令執行完畢。如果指定了HOLDLOCK 選項,則共享的表鎖定會維持到事務結束。 TABLOCKX
指定用SELECT 命令讀取數據時對所選取的表的全部數據做鎖定,直到整個命令或事務執行完畢。 UPDLOCK
指定在SELECT 命令執行時使用更新鎖(Update Lock),而不使用共享鎖,并且此更新鎖將維持到命令執行結束為止。如果省略WHERE子句,則表示刪除表中的全部數據,但表的定義仍在數據庫中,也就是說,DELETE子句刪除的是表中的數據,而不是關于表的定義。 NOLOCK、READUNCOMMITIED或READPAST表提示不能用于作為插入、刪除或更新操作對象的表。
11.2.2 用DELETE 刪除數據
(1) 刪除一條記錄
例11-5 刪除編號為‘10031011 ’的員工記錄
use pangu
delete from employee
where emp_id = ’10031011’
(2) 刪除多條記錄
例11-6 刪除所有的部門信息記錄
use pangu
delete from department_info /* 或使用 delete department_info */
這個例子刪除了department_info 表中的所有數據使它成為空表
(3) 帶子查詢的刪除語句
子查詢同樣可以嵌套在DELETE 語句中,用以構造執行刪除操作的條件。
例11-7: 刪除后勤部所有員工的記錄。
use pangu
delete from employee
where dept_id =
(select dept_id
from department
where d_name = ’后勤部’)
例11-8 刪除訂貨表前100 項記錄中所有產品編號為1003002 的產品
use pangu
delete orders
from (select top 100 * from orders) as orders_ top100
where orders.p_id = orders_ top100.p_id
(4) 刪除當前游標行數據
例11-9: 刪除游標dinfo_cursor 所指定的數據行。
delete from department_info
where current of dinfo_cursor
11.2.3 TRUNCATE TABLE 命 令
如果要刪除表中的所有數據,那么使用TRUNCATE TABLE 命令比用DELETE 命令快得多。因為DELETE 命令除了刪除數據外,還會對所刪除的數據在事務處理日志中作記錄,以防止刪除失敗時可以使用事務處理日志來恢復數據;而TRUNCATE TABLE 則只做刪除與表有關的所有數據頁的操作。TRUNCATE TABLE 命令功能上相當于使用不帶WHERE 子句的DELETE 命令。但是TRUNCATE TABLE 命令不能用于被別的表的外關鍵字依賴的表。
TRUNCATE TABLE 命令語法如下:
TRUNCATE TABLE table_name
注意:由于TRUNCATE TABLE命令不會對事務處理日志進行數據刪除記錄操作,因此不能激活觸發器。
例11-10: 刪除所有的部門信息記錄。
use pangu
truncate table department_info
轉載于:https://www.cnblogs.com/Athrun/archive/2007/07/27/833189.html
總結
以上是生活随笔為你收集整理的MS SQL入门基础:删除数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL 2000 异数据库数据同步
- 下一篇: VS集成环境中的JavaScript脚本