直接总结
delete
delete from 表名;
delete 操作并不是真的把数据删除掉了,而是给数据打上删除标记,标记为删除状态
truncate
truncate table 表名
为什么 truncate 只是删除了行数据,没有删除列数据(字段和索引等数据)却是 DDL 语言呢?这是因为 truncate 本质上是新建了一个表结构,再把原先的表删除掉,所以它属于 DDL 语言,而非 DML 语言。
delete是DML语句,操作完了,还可以回滚;truncate和drop是DDL语句,删除之后立即生效,不能回滚;
- 如果表被锁住,truncate会报错;
- 如果有外键约束,truncate也会报错;
drop
drop table 表名 [IF EXISTS] 表名
drop是DDL(数据定义语言),用于整张表的删除,删除的时候不仅删除了表中的数据,还删除了表结构。(也就是使用drop删除表后,数据库中便查询不到该表)
扩展
为了形成数据库语言,DDL和DML都是必须的。DDL和DML之间的主要区别在于:DDL有助于更改数据库的结构,而DML有助于管理数据库中的数据。
DML
(1)DML代表数据操作语言,是一种有助于检索和管理关系数据库中数据的SQL命令;会影响表中的一个或多个记录;可以回滚;
(2)常用的DML语句:insert,update,delete,select等等;
DDL
(1)DDL代表数据定义语言,是一种有助于创建数据库模式的SQL命令;会影响整个数据库或者表,不可以回滚;
(2)常用的DDL语句:create,drop,alter,truncate和rename等等;