• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    实例理解SQL中truncate和delete的区别
    POST TIME:2021-10-18 18:13

    本文以一个简单实例为大家介绍了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的使用方法有所帮助。

    您可能感兴趣的文章:
    • Oracle给用户授权truncatetable的实现方案
    • delete from 表名与truncate table 表名区别
    • SQL中Truncate的用法
    • golang实战之truncate日志文件详解
    • tf.truncated_normal与tf.random_normal的详细用法
    • smarty中改进truncate使其支持中文的方法
    • SQL Server中TRUNCATE事务回滚操作方法
    • 详解SQL中drop、delete和truncate的异同
    • Mysql开启慢SQL并分析原因
    • Truncate Table的用法讲解
    上一篇:SQLServer批量更新两个关联表数据的方法
    下一篇:SQL Server 跨库同步数据
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信