本文以一個簡單實例為大家介紹了SQL中truncate和delete的區(qū)別,幫助大家理解,具體內(nèi)容如下
---創(chuàng)建表Table1IF OBJECT_ID('Table1','U') IS NOT NULLDROP TABLE Table1GOCREATE TABLE Table1(ID INT NOT NULL,FOID INT NOT NULL)GO--插入測試數(shù)據(jù)INSERT INTO Table1VALUES(1,101),(2,102),(3,103),(4,104)GO---創(chuàng)建表Table2IF OBJECT_ID('Table2','U') IS NOT NULLDROP TABLE Table2GOCREATE TABLE Table2(FOID INT NOT NULL)GO--插入測試數(shù)據(jù)INSERT INTO Table2 VALUES(101),(102),(103),(104)GO SELECT * FROM Table1GO SELECT * FROM Table2GO 在Table1表中創(chuàng)建觸發(fā)器,當表中的數(shù)據(jù)被刪除時同時刪除Table2表中對應(yīng)的FOID
CREATE TRIGGER TG_Table1 ON Table1AFTER DELETEASBEGIN DELETE FROM TA FROM Table2 TA INNER JOIN deleted TB ON TA.FOID=TB.FOID ENDGO
---測試DELETE刪除操作DELETE FROM Table1 WHERE ID=1GO---執(zhí)行觸發(fā)器成功,Table2表中的FOID=101的數(shù)據(jù)也被刪除SELECT * FROM Table1GOSELECT * FROM Table2

---測試TRUNCATE刪除操作TRUNCATE TABLE Table1GO---Table2中的數(shù)據(jù)沒有被刪除SELECT * FROM Table1GOSELECT * FROM Table2

---查看TRUNCATE和DELETE的日志記錄情況CHECKPOINTGOSELECT * FROM fn_dblog(NULL,NULL)GODELETE FROM Table2WHERE FOID=102GOSELECT * FROM fn_dblog(NULL,NULL)

在第四行記錄有一個lop_delete_rows,lcx_heap的刪除操作日志記錄
----TRUNCATE日志記錄CHECKPOINTGOSELECT * FROM fn_dblog(NULL,NULL)GOTRUNCATE TABLE Table2GOSELECT * FROM fn_dblog(NULL,NULL)GO

TRUNCATE操作沒有記錄刪除日志操作
主要的原因是因為TRUNCATE操作不會激活觸發(fā)器,因為TRUNCATE操作不會記錄各行的日志刪除操作,所以當你需要刪除一張表的數(shù)據(jù)時你需要考慮是否應(yīng)該如有記錄日志刪除操作,而不是根據(jù)個人的習慣來操作。
以上就是本文的全部內(nèi)容,希望對大家區(qū)分SQL中truncate和delete的使用方法有所幫助。



















