删除 MySQL 表中的所有数据17 Mar 2025 | 6 分钟阅读 如果用户想删除MySQL中的表中的所有记录,那么用户需要实现TRUNCATE语句。 TRUNCATE语句的语法在MySQL RDBMS中实现TRUNCATE查询的语法如下: TRUNCATE TABLE 函数- TRUNCATE TABLE 函数会删除表中的所有记录。如果用户想要删除表中的所有数据,那么用户必须拥有DROP权限。TRUNCATE语句类似于MySQL中的DELETE语句。它的作用与DELETE语句类似,因为它会删除表中的所有行。它是一系列DROP和CREATE TABLE语句。
- 如果用户想提高效率,那么TRUNCATE TABLE比使用数据操作语言方法删除表中的数据要好。因此,实现TRUNCATE TABLE不会触发ON DELETE触发器。因此,它不能用于包含父子外键关系的InnoDB表。在执行DML语句时,用户无法回滚TRUNCATE语句。
- TRUNCATE TABLE语句可以在使用原子数据定义语言支持的存储引擎的表中实现。如果服务器在MySQL中执行查询时停止,则该查询可以完全完成或回滚。
- TRUNCATE语句在逻辑上实现为DELETE语句,但TRUNCATE语句被认为是数据定义语言语句,而DELETE被认为是数据操作语言命令。
TRUNCATE和DELETE语句之间的区别TRUNCATE和DELETE语句之间的区别如下: - 如果用户执行TRUNCATE语句,它类似于执行DROP语句并重新创建同一个表。它比使用DELETE语句执行起来更快,因为用户将不得不为表中的每一行执行DELETE语句。对于包含大量记录的表来说,这将很难。
- 用户在使用TRUNCATE语句时不需要隐式执行COMMIT查询。用户无法执行回滚。因此,用户应该在对数据执行TRUNCATE语句之前创建现有表的副本。
- 如果当前会话持有活动的表锁,则用户无法截断表。
- 如果其他表中的外键约束引用了该表,用户不能在任何上述表包含外键约束的InnoDB或NDB表中执行TRUNCATE TABLE。如果外键约束在同一表中的列内,用户可以实现TRUNCATE语句。
- 当用户使用DELETE语句时,它还会返回受特定查询影响的行数,但在使用TRUNCATE语句时,不会返回有意义的值。它显示0行受影响,这在MySQL中可以被解释为没有信息。
- 假设正在执行查询的表定义是有效的。在这种情况下,即使表中的数据或索引文件损坏,TRUNCATE语句也会返回一个空表。
- 如果用户使用了AUTO_INCREMENT值,它的值将返回到其初始值。这甚至适用于通常不允许用户重新分配序列值的InnoDB和MyISAM。
- 如果TRUNCATE命令与分区表一起执行,那么在执行TRUNCATE TABLE时会保留分区。实际数据和索引文件将被删除然后重新创建。窗口中的分区保持不变。
- 当用户在表上执行TRUNCATE TABLE命令时,它不会调用ON DELETE触发器。
- 用户也可以在损坏的InnoDB表上实现TRUNCATE语句。
- TRUNCATE TABLE执行二进制日志记录和复制,作为数据定义语言而不是数据操作语言。此语句始终作为语句记录。
- 当TRUNCATE TABLE语句用于表时,它会关闭所有使用HANDLER OPEN语句打开的特定表的句柄。
- 在MySQL 5.7及更早版本中,在具有大型缓冲池且启用了innodb_adaptive_hash_index的系统上,TRUNCATE TABLE可能会暂时降低系统性能。性能下降是由于在删除表的自适应哈希索引条目时执行了LRU扫描。在最新版本中,当在表上执行TRUNCATE语句时,将TRUNCATE TABLE重新映射为DROP和CREATE TABLE可以防止其执行LRU扫描。
- 该命令还可以用于Performance Schema中存在的摘要表。TRUNCATE TABLE对这些表的影响是将其摘要列重置为0或NULL。它不会从表中删除行。
- 如果TRUNCATE TABLE命令在存储在文件表表空间中的InnoDB表上执行,它会删除现有的表空间并创建一个新的表空间。
TRUNCATE语句的实现用户可以在现有表上实现TRUNCATE命令。我们已经讨论了实现TRUNCATE命令的语法。如下所示: 在实现TRUNCATE语句之前,用户必须创建一个表并向表中添加数据,以确保TRUNCATE命令成功执行。 要在MySQL中创建表,请使用CREATE TABLE命令。 上述查询将定义一个名为demo_table的表,其中包含三个列:StudentID、Student_Name和Student_Course。 下一步是将数据存储在定义的表中。如果用户想向表中插入记录,那么用户需要实现INSERT语句。在demotable中添加数据的语法如下: 输入给定的查询以将数据插入表中 在MySQL中执行上述5个SQL语句将在demo_table中拥有这五行信息。一旦将数据值添加到表的相应列中,用户就可以通过显示表中的所有记录来检查。 用户必须实现SELECT查询来查看表中存储的所有记录。显示demotable的查询如下: 它将返回给定输出  在检查所有值都已成功记录到表中之后。使用上述语法实现TRUNCATE语句以删除表中的所有记录。可以实现TRUNCATE命令的查询如下: 它将删除表中的所有现有数据。显示demo_table中的记录以确保TRUNCATE语句已成功执行。您可以通过再次实现SELECT查询来检查是否已从表中删除所有数据。 它不会返回任何数据,表明表是空的。为了确保表是空的,尝试向表中插入新数据。您将看到这是demotable中的第一个值。 输出  使用DELETE关键字用户也可以使用DELETE关键字删除所有数据行而不删除表定义。如果用户实现DELETE语句,它确保表定义、属性和索引不受查询的影响。 DELETE语句的语法 实现DELETE语句 首先,创建与上面相同的表,用户将在此表上实现DELETE语句。执行以下查询来创建表并向表中添加数据。 一旦值记录到表中,您就可以通过实现SELECT查询来显示表中的记录来检查它们。 输出  最后,使用delete关键字删除demotable中的所有记录。 上述语句将删除存储在demotable中的所有数据记录。表定义保持不变。为了确保表是空的,尝试向表中插入新数据。您将看到这是demotable中的第一个值。 输出 
|