mysql 之 删除数据表的方法

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 表语句 表及其所有关系、索引、权限等将被永久删除 表行被永久删除 表行不会被永久删除
经验分享 程序员 微信小程序 职场和发展