电竞比分网-中国电竞赛事及体育赛事平台

分享

12.2 刪除表中的數(shù)據(jù) - 《精通SQL——結(jié)構(gòu)化查詢語言詳解》 - 免費試讀 - bo...

 昵稱310935 2009-09-17

12.2.1  DELETE語句基本語法

使用DELETE語句從數(shù)據(jù)庫刪除數(shù)據(jù),基本語法如下。

DELETE FROM                                            table_name

WHERE                                                                       search_condition

說明:該語句將從表中刪除符合條件的數(shù)據(jù)行,如果沒有WHERE語句,則刪除所有數(shù)據(jù)行。通過使用DELETE語句的WHERE子句,SQL可以刪除單行數(shù)據(jù)、多行數(shù)據(jù)以及所有行數(shù)據(jù)。使用DELETE語句時,應(yīng)注意以下幾點。

*     DELETE語句不能刪除單個字段的值,只能刪除整行數(shù)據(jù)。要刪除單個字段的值,可以采用上節(jié)介紹的使用UPDATE語句,將其更新為NULL。

*     使用DELETE語句僅能刪除記錄即表中的數(shù)據(jù),不能刪除表本身。要刪除表,需要使用前面介紹的DROP TABLE語句。

*     同INSERT和UPDATA語句一樣,從一個表中刪除記錄將引起其他表的參照完整性問題。這是一個潛在問題,需要時刻注意。

注意

在DELETE語句中沒有指定列名,這是因為不能從表中刪除單個列的值,只能整行刪除。如果需要刪除特定的列值,應(yīng)使用UPDATE語句將該值設(shè)置為NULL,當然,前提是該列沒有NOT NULL約束,具體操作可參加12.1.2節(jié)的例程。

12.2.2  DELETE語句刪除單行數(shù)據(jù)

DELETE語句可以刪除數(shù)據(jù)庫表中的單行數(shù)據(jù)、多行數(shù)據(jù)以及所有行數(shù)據(jù)。同時在WHERE子句中,也可以通過子查詢刪除數(shù)據(jù)。本節(jié)主要通過一個實例說明如何從表中刪除單行數(shù)據(jù)。

實例9  DELETE語句刪除單行數(shù)據(jù)

從New_Teacher2表中,刪除教工號為8的教師記錄。實例代碼:

DELETE FROM                        New_Teacher2

WHERE                                                   TNO=8

查看表New_Teacher2的數(shù)據(jù)。

SELECT  *  FROM  New_Teacher2

運行結(jié)果如圖12.10所示。

圖12.10  刪除New_Teacher2表中教工號為8的教師記錄

可見,教工號為8的教師記錄已經(jīng)被整行刪除。

12.2.3  DELETE語句刪除多行數(shù)據(jù)

與前面介紹的數(shù)據(jù)更新操作一樣,可以在WHERE子句中設(shè)置各種搜索條件,也可以通過子查詢或者多表連接的方式選擇要刪除的行。

實例10  DELETE語句刪除多行數(shù)據(jù)

從New_Teacher2表中,刪除工資低于所有教師平均工資的男教師的記錄。

實例代碼:

DELETE FROM                        New_Teacher2

WHERE                                                  TSEX=’男’

AND                                                                        SAL < (SELECT  avg(SAL)

                                                                                                                    FROM                New_Teacher2)

查看表New_Teacher2的數(shù)據(jù)。

SELECT  *  FROM  New_Teacher2

運行結(jié)果如圖12.11所示。

可見,教工號為1和3的兩位男教師記錄已經(jīng)被刪除。

圖12.11  刪除New_Teacher2表中工資低于所有教師平均工資的男教師的記錄

12.2.4  DELETE語句刪除所有行

如果DELETE語句中,不包含WHERE子句,則該表的所有行都將被刪除。

實例11  DELETE語句刪除所有行

刪除New_Teacher2表中的所有記錄,代碼如下:

DELETE FROM                        New_Teacher2

查看表New_Teacher2的數(shù)據(jù)。

SELECT  *  FROM  New_Teacher2

運行結(jié)果如圖12.12所示。

圖12.12  刪除New_Teacher2表中的所有記錄

可以發(fā)現(xiàn),New_Teacher2表中的所有記錄都被刪除了,但是New_Teacher2表本身(各個字段)還存在,并沒有被刪除。

12.2.5  TRUNCATE TABLE語句

從12.2.4節(jié)可以看到,使用沒有WHERE子句的DELETE語句可以從表中刪除所有的行。在SQL Server中,還提供了TRUNCATE TABLE語句,供用戶刪除表中的所有數(shù)據(jù),同時又不刪除表結(jié)構(gòu)。TRUNCATE TABLE語句語法如下。

TRUNCATE TABLE  table_name

雖然使用DELETE語句和TRUNCATE TABLE語句都能夠刪除表中的所有數(shù)據(jù),但是使用TRUNCATE TABLE語句比用DELETE語句快得多,表現(xiàn)為以下兩點。

*     使用DELETE語句,系統(tǒng)將一次一行地處理要刪除的表中的記錄,在從表中刪除行之前,在事務(wù)處理日志中記錄相關(guān)的刪除操作和刪除行中的列值,以防止刪除失敗時,可以使用事務(wù)處理日志來恢復(fù)數(shù)據(jù)。

*     TRUNCATE TABLE則一次性完成刪除與表有關(guān)的所有數(shù)據(jù)頁的操作。另外,TRUNCATE TABLE語句并不更新事務(wù)處理日志。由此,在SQL Server中,使用TRUNCATE TABLE語句從表中刪除行后,將不能用ROLLBACK命令取消行的刪除操作。

注意

TRUNCATE TABLE語句不能用于有外關(guān)鍵字依賴的表。

實例12  TRUNCATE TABLE語句刪除表中的數(shù)據(jù)

刪除New_Teacher表中的所有數(shù)據(jù),代碼如下。

TRUNCATE TABLE                     New_Teacher

查看刪除數(shù)據(jù)后表New_Teacher中的數(shù)據(jù)。

SELECT  *  FROM  New_Teacher

運行結(jié)果如圖12.13所示。

圖12.13  刪除New_Teacher表中的所有數(shù)據(jù)

可見,表New_Teacher中的數(shù)據(jù)均被刪除,但表結(jié)構(gòu)并沒有被刪除,這與DROP TABLE語句是不同的。



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多