1、drop table table_name
使用 drop table 命令删除数据表和数据表中所有的内容。
语法:
drop table table_name
2、delete table table_name
使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录。
delete from table_name [where clause]
- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
- 你可以在 WHERE 子句中指定任何条件
- 您可以在单个表中一次性删除记录。
当你想删除数据表中指定的记录时 WHERE 子句是非常有用的。
下面有一张表:
删除bt表中b等于0的记录:
删除bt表所有记录:
可以看到delete删除表的时候只是删除记录,不会删除到表的结构等。
3、truncate table table_name
Truncate 语句被认为是 DDL(数据定义语言)命令而不是 DML(数据操作命令)。这是因为每当我们使用这个命令时,表内容不会被操作,而是整个表被删除并重新创建。
- 每当在表上执行TRUNCATE 命令时,不会执行在删除事件上定义的触发器,因为行不会被删除,整个表也会被删除。
- 我们无法回滚TRUNCATE TABLE命令的操作,因为它是隐式提交的。但是,如果在截断整个操作时出现任何问题,MySQL会回滚,保持数据原封不动。
- 如果表上有任何激活锁,则不能在其上执行TRUNCATE TABLE 命令,直到并且除非该锁被解锁。
- 如果当前表的其他表中定义了任何外键,则不能截断当前表,因为其他表的外键正在引用该表的列。
- 执行TRUNCATE查询的输出总是0行受影响,它没有指定删除的记录数,而是代表没有信息。
- 表的所有索引和数据都被删除,但表上定义的分区即使在截断表后仍保持不变。
- 与分配了AUTO_INCREMENT属性的列关联的序列被重置为起始值。这也适用于不支持重复使用序列值的存储引擎,如InnoDB和MyISAM。
- 我们甚至可以使用TRUNCATE语句截断已损坏的InnoDB表。
- 考虑到TRUNCATE 命令的性能,它总是超过对所有行执行的DELETE 命令,因为它跳过了表操作中涉及的DML操作。
语法:
truncate table table_name
下面看个例子:删除名为b的表
4、三种方法的区别
drop table | truncate table | delete table |
删除表中所有数据并销毁表本身的 SQL 语句 | 从表中删除数据行的 SQL 语句 | 从表中删除数据行的 SQL 语句 |
它是一个数据定义语言 (DDL) 语句 | 它是一个数据定义语言 (DDL) 语句 | 它是一个数据操作语言 (DML) 语句 |
不能使用 WHERE 条件 | 不能使用 WHERE 条件 | 可以使用 WHERE 条件 |
无法执行回滚操作来撤消 DROP 表语句 | 无法执行回滚操作来撤消 TRUNCATE 表语句 | 可以执行回滚操作来撤消 DELETE 表语句 |
表及其所有关系、索引、权限等将被永久删除 | 表行被永久删除 | 表行不会被永久删除 |