程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 實例懂得SQL中truncate和delete的差別

實例懂得SQL中truncate和delete的差別

編輯:MSSQL

實例懂得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的應用辦法有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved