執行個體理解SQL中truncate和delete的區別_MsSql

來源:互聯網
上載者:User

本文以一個簡單一實例為大家介紹了SQL中truncate和delete的區別,協助大家理解,具體內容如下

---建立表Table1IF OBJECT_ID('Table1','U') IS NOT NULLDROP TABLE Table1GOCREATE TABLE Table1(ID INT NOT NULL,FOID INT NOT NULL)GO--插入測試資料INSERT INTO Table1VALUES(1,101),(2,102),(3,103),(4,104)GO---建立表Table2IF OBJECT_ID('Table2','U') IS NOT NULLDROP TABLE Table2GOCREATE TABLE Table2(FOID INT NOT NULL)GO--插入測試資料INSERT INTO Table2 VALUES(101),(102),(103),(104)GO SELECT * FROM Table1GO SELECT * FROM Table2GO

在Table1表中建立觸發器,當表中的資料被刪除時同時刪除Table2表中對應的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---執行觸發器成功,Table2表中的FOID=101的資料也被刪除SELECT * FROM Table1GOSELECT * FROM Table2

 

---測試TRUNCATE刪除操作TRUNCATE TABLE Table1GO---Table2中的資料沒有被刪除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操作不會啟用觸發器,因為TRUNCATE操作不會記錄各行的日誌刪除操作,所以當你需要刪除一張表的資料時你需要考慮是否應該如有記錄日誌刪除操作,而不是根據個人的習慣來操作。

以上就是本文的全部內容,希望對大家區分SQL中truncate和delete的使用方法有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.