相同点:用于删除数据,同时保留表结构.
不同点:
TRUNCATE比DELETE更快(数据量小可能体现不出来,单数据量大就很明显了)
原因:TRUNCATE是DDL(数据定义语言)DELETE是逐行删除属于(DML)
TRUNCATE 不会产生大量日志,但DELETE删除会产生大量日志
DELETE FROM 可以加WHERE子句指定删除条件,TRUNCATE不支持带条件
DELETE可以回滚
TRUNCATE不可以回滚
DELETE不会重置主键
TRUNCATE会重置主键
这里也说明下
DDL(数据定义语言)一旦操作不可回滚
DML(数据操作语言):默认情况也不可以回滚.但是在执行DML语言之前
SET AUTOCOMMIT=FASLE 则执行的DML操作就可以实现回滚
SET AUTOCOMMIT=FASLE 是一次会话有效
BEGIN TRANSACTION
或 START TRANSACTION
是开启新事务
SET AUTOCOMMIT=FASLE 针对的是一次会话
在同一次会话中,多次操作都是一个新事务 遇到COMMIT或ROLLBACK事务结束,但是同一次会话中无需开启新的事务,会自动开启
BEGIN TRANSACTION
或 START TRANSACTION针对的是一次新事务的操作
COMMIT或ROLLBACK后结束