實(shí)例理解SQL中truncate和delete的區(qū)別
本文以一個(gè)簡(jiǎn)單實(shí)例為大家介紹了SQL中truncate和delete的區(qū)別,幫助大家理解,具體內(nèi)容如下
---創(chuàng)建表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
--插入測(cè)試數(shù)據(jù)
INSERT INTO Table1
VALUES(1,101),(2,102),(3,103),(4,104)
GO
---創(chuàng)建表Table2
IF OBJECT_ID('Table2','U') IS NOT NULL
DROP TABLE Table2
GO
CREATE TABLE Table2
(
FOID INT NOT NULL)
GO
--插入測(cè)試數(shù)據(jù)
INSERT INTO Table2 VALUES(101),(102),(103),(104)
GO
SELECT * FROM Table1
GO
SELECT * FROM Table2
GO
在Table1表中創(chuàng)建觸發(fā)器,當(dāng)表中的數(shù)據(jù)被刪除時(shí)同時(shí)刪除Table2表中對(duì)應(yīng)的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
---測(cè)試DELETE刪除操作 DELETE FROM Table1 WHERE ID=1 GO ---執(zhí)行觸發(fā)器成功,Table2表中的FOID=101的數(shù)據(jù)也被刪除 SELECT * FROM Table1 GO SELECT * FROM Table2

---測(cè)試TRUNCATE刪除操作 TRUNCATE TABLE Table1 GO ---Table2中的數(shù)據(jù)沒(méi)有被刪除 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)

在第四行記錄有一個(gè)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操作沒(méi)有記錄刪除日志操作
主要的原因是因?yàn)門RUNCATE操作不會(huì)激活觸發(fā)器,因?yàn)門RUNCATE操作不會(huì)記錄各行的日志刪除操作,所以當(dāng)你需要?jiǎng)h除一張表的數(shù)據(jù)時(shí)你需要考慮是否應(yīng)該如有記錄日志刪除操作,而不是根據(jù)個(gè)人的習(xí)慣來(lái)操作。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家區(qū)分SQL中truncate和delete的使用方法有所幫助。
- Oracle給用戶授權(quán)truncatetable的實(shí)現(xiàn)方案
- delete from 表名與truncate table 表名區(qū)別
- SQL中Truncate的用法
- golang實(shí)戰(zhàn)之truncate日志文件詳解
- tf.truncated_normal與tf.random_normal的詳細(xì)用法
- smarty中改進(jìn)truncate使其支持中文的方法
- SQL Server中TRUNCATE事務(wù)回滾操作方法
- 詳解SQL中drop、delete和truncate的異同
- Mysql開啟慢SQL并分析原因
- Truncate Table的用法講解
相關(guān)文章
根據(jù)多條件查詢臨時(shí)表 想得到不同結(jié)果集的方法
很多情況下,需要采用多個(gè)參數(shù)來(lái)查詢一張臨時(shí)表,每個(gè)參數(shù)都要求得到不同的臨時(shí)表結(jié)果集。而往往某些參數(shù)并不對(duì)應(yīng)這張臨時(shí)表中的字段,而是對(duì)應(yīng)與該臨時(shí)表ID關(guān)聯(lián)的另一張表的字段。2009-11-11
SQL Server 2016 查詢存儲(chǔ)性能優(yōu)化小結(jié)
SQL Server 2016已經(jīng)發(fā)布了有半年多,相信還有很多小伙伴還沒(méi)有開始使用,今天我們來(lái)談?wù)凷QL Server 2016 查詢存儲(chǔ)性能優(yōu)化,希望大家能夠喜歡2016-01-01
SQL恢復(fù)master數(shù)據(jù)庫(kù)方法 只有mdf文件的數(shù)據(jù)庫(kù)如何恢復(fù)
這篇文章主要為大家詳細(xì)介紹了SQL恢復(fù)master數(shù)據(jù)庫(kù)方法,還分析了只有mdf文件的數(shù)據(jù)庫(kù)如何進(jìn)行恢復(fù)的情況,也就是沒(méi)有l(wèi)og文件的數(shù)據(jù)庫(kù)文件恢復(fù)方法,感興趣的小伙伴們可以參考一下2016-05-05
MS SQL Server游標(biāo)(CURSOR)的學(xué)習(xí)使用
使用MS SQL Server這樣久,游標(biāo)一直沒(méi)有使用過(guò)。以前都是使用WHILE循環(huán)加臨時(shí)表來(lái)實(shí)現(xiàn)。剛剛聯(lián)系個(gè)示例了解到游標(biāo)概念與語(yǔ)法2014-06-06
SQL SERVER連線查詢數(shù)據(jù)源IP地址及開啟SQL的IP地址連線方法
這篇文章主要介紹了SQL SERVER連線查詢數(shù)據(jù)源IP地址及開啟SQL的IP地址連線方法,文中通過(guò)圖文結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-06-06
SQLite3數(shù)據(jù)庫(kù)的介紹和使用教程(面向業(yè)務(wù)編程-數(shù)據(jù)庫(kù))
這篇文章主要介紹了SQLite3數(shù)據(jù)庫(kù)的介紹和使用(面向業(yè)務(wù)編程-數(shù)據(jù)庫(kù)),本文從SQLite3的庫(kù)的獲取、工程管理、SQL語(yǔ)句介紹、C語(yǔ)言編程四個(gè)角度闡述了SQLite3數(shù)據(jù)庫(kù)的實(shí)際應(yīng)用,需要的朋友可以參考下2023-05-05
SQL?Server?2022新功能之如何將數(shù)據(jù)庫(kù)備份到S3兼容的對(duì)象存儲(chǔ)
本文介紹了如何使用SQL Server 2022將數(shù)據(jù)庫(kù)備份到S3兼容的對(duì)象存儲(chǔ),主要功能包括配置S3連接器、創(chuàng)建憑據(jù)、使用URL進(jìn)行備份和恢復(fù),并支持加密和壓縮選項(xiàng),此外,還討論了在Linux平臺(tái)上的特殊配置要求和區(qū)域參數(shù)的使用,感興趣的朋友一起看看吧2025-02-02

