實例懂得SQL中truncate和delete的差別。本站提示廣大學習愛好者:(實例懂得SQL中truncate和delete的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是實例懂得SQL中truncate和delete的差別正文
本文以一個簡略實例為年夜家引見了SQL中truncate和delete的差別,贊助年夜家懂得,詳細內容以下
---創立表Table1 IF OBJECT_ID('Table1','U') IS NOT NULL DROP TABLE Table1 GO CREATE TABLE Table1 (ID INT NOT NULL, FOID INT NOT NULL) GO --拔出測試數據 INSERT INTO Table1 VALUES(1,101),(2,102),(3,103),(4,104) GO ---創立表Table2 IF OBJECT_ID('Table2','U') IS NOT NULL DROP TABLE Table2 GO CREATE TABLE Table2 ( FOID INT NOT NULL) GO --拔出測試數據 INSERT INTO Table2 VALUES(101),(102),(103),(104) GO SELECT * FROM Table1 GO SELECT * FROM Table2 GO
在Table1表中創立觸發器,當表中的數據被刪除時同時刪除Table2表中對應的FOID
CREATE TRIGGER TG_Table1 ON Table1 AFTER DELETE AS BEGIN DELETE FROM TA FROM Table2 TA INNER JOIN deleted TB ON TA.FOID=TB.FOID END GO
---測試DELETE刪除操作 DELETE FROM Table1 WHERE ID=1 GO ---履行觸發器勝利,Table2表中的FOID=101的數據也被刪除 SELECT * FROM Table1 GO SELECT * FROM Table2
---測試TRUNCATE刪除操作 TRUNCATE TABLE Table1 GO ---Table2中的數據沒有被刪除 SELECT * FROM Table1 GO SELECT * FROM Table2
---檢查TRUNCATE和DELETE的日記記載情形 CHECKPOINT GO SELECT * FROM fn_dblog(NULL,NULL) GO DELETE FROM Table2 WHERE FOID=102 GO SELECT * FROM fn_dblog(NULL,NULL)
在第四行記載有一個lop_delete_rows,lcx_heap的刪除操作日記記載
----TRUNCATE日記記載 CHECKPOINT GO SELECT * FROM fn_dblog(NULL,NULL) GO TRUNCATE TABLE Table2 GO SELECT * FROM fn_dblog(NULL,NULL) GO
TRUNCATE操作沒有記載刪除日記操作
重要的緣由是由於TRUNCATE操作不會激活觸發器,由於TRUNCATE操作不會記載各行的日記刪除操作,所以當你須要刪除一張表的數據時你須要斟酌能否應當若有記載日記刪除操作,而不是依據小我的習氣來操作。
以上就是本文的全體內容,願望對年夜家辨別SQL中truncate和delete的應用辦法有所贊助。