DROP、DELETE与TRUNCATE

  • DROPDELETETRUNCATE都是SQL中用于删除数据的命令,但它们的作用和使用场景不同。

DROP

  • 语法:DROP TABLE 表名
  • 作用:完全删除整个表,包括表结构、数据、索引、触发器、约束等所有相关对象
  • 使用场景:当表不再需要时使用

DELETE

  • 语法:DELETE FROM 表名 WHERE 条件
  • 作用:删除表中满足条件的行,不带WHERE子句会删除表中所有行,但表结构和相关对象仍然存在
  • 特点:自增字段(AUTO_INCREMENT)不会重置,继续从之前的值递增
  • 使用场景:当需要删除特定数据时使用

TRUNCATE

  • 语法:TRUNCATE TABLE 表名
  • 作用:删除表中所有行,但保留表结构和相关对象
  • 特点:自增字段会重置,下一次插入会从1开始
  • 使用场景:当需要快速清空表数据但保留表结构时使用

对表结构的影响

  • DROP:删除表结构和所有数据
  • DELETE:保留表结构,删除数据
  • TRUNCATE:保留表结构,删除数据

触发器

  • DELETE会触发DELETE触发器
  • TRUNCATEDROP不会触发DELETE触发器

事务和回滚

  • DROP:属于DDL操作,不能回滚
  • DELETE:属于DML操作,可以回滚
  • TRUNCATE:属于DDL操作,不能回滚
  • 注:
    • DML:数据库操作语言(Data Manipulation Language),是指对数据库中表记录的操作,主要包括表记录的插入、更新、删除和查询,是开发人员日常使用最频繁的操作。
    • DDL:数据定义语言(Data Definition Language),是对数据库内部的对象进行创建、删除、修改的操作语言。它和DML语言的最大区别是DML只是对表内部数据的操作,而不涉及到表的定义、结构的修改,更不会涉及到其他对象。DDL语句更多的被数据库管理员(DBA)所使用,一般的开发人员很少使用。