MySQL中除了DELETE语句可以删除数据外,在MySQL中还可以利用TRUNCATE清空指定数据表中的所有数据。执行语句是
TRUNCATE
TRUNCATE操作虽然与DELETE非常相似,但是两者在本质上有一定的区别,具体如下。
实现方式不同:truncate本质上先执行删除(DROP)数据表的操作,然后在根据有效的表结构文件(.frm)重新创建数据表的方式来实现数据清空操作。而DELETE语句则是逐条的删除数据表中保存的记录。
执行效率不同:在针对大型数据表(如千万级的数据记录)时,TRUNCATE清空数据的实现方式决定了它比DELETE语句删除数据的方式执行效率更高。
对AUTO_INCREMENT的字段影响不同:TRUNCATE清空数据后,再次向表中添加数据,自动增长字段会从默认的初始值开始,而使用DELETE语句删除表中的数据时,则不影响自动增长值。
删除数据的范围不同:TRUNCATE语句只能清空表中所有记录,而DELETE语句可通过WHERE指定删除满足条件的部分记录。
返回值含义不同:TRUNCATE操作的返回值一般是无意义的,而DELETE语句则会返回符合条件被删除的记录数。
所属SQL语言的不同组成部分:DELETE语句数据DML数据操作语句,而TRUNCATE通常被认为是DDL数据定义部分。
拓展:
数据定义语言(Data Definition Language,DDL),用于定义和管理对象,例如数据库、数据表以及视图,例如:CREATE、DROP、ALTER等语句。
数据操作语言(Data Manipulation Language,DML),用于操作数据库对象所包含的数据,例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。
数据查询语言(Data Query Language,DQL),例如:SELECT语句。
数据控制语言(Data Control Language,DCL),用于控制对数据库对象操作的权限,例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。