删除MySQL中的所有数据
如果用户想要删除MySQL中表中的所有记录,那么用户需要执行TRUNCATE语句。
TRUNCATE语句的语法
在MySQL RDBMS中执行truncate查询的语法如下:
TRUNCATE TABLE table_name;
截断表的功能
- 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时保留分区。实际数据和索引文件将被删除,然后重新创建。Windows中的分区保持不变。
- 当用户在表上实现TRUNCATE TABLE命令时,它不会调用ON DELETE触发器。
- 用户还可以在损坏的InnoDB表上执行TRUNCATE语句。
- TRUNCATE TABLE将数据定义语言而不是数据操作语言作为二进制日志记录和复制。该语句始终作为一个语句进行记录。
- 当使用TRUNCATE TABLE语句对表进行操作时,它会关闭使用HANDLER OPEN语句打开的特定表的所有处理程序。
- 在MySQL 5.7及更早版本中,对于具有大型缓冲池且启用了innodb_adaptive_hash_index的系统来说,TRUNCATE TABLE可能会暂时降低系统性能。性能下降是因为在删除表的自适应散列索引条目时执行了LRU扫描。在最新版本中,当实现截断语句时,将TRUNCATE TABLE重新映射为DROP和CREATE TABLE,从而阻止执行LRU扫描。
- 命令还可以在性能模式中存在的摘要表上实现。TRUNCATE TABLE对这些表的影响是将摘要列重置为0或NULL。它不会从表中删除行。
- 如果在文件-每个表表空间中存储的InnoDB表上实施TRUNCATE TABLE命令,它将删除现有的表空间并创建一个新的表空间。
实现TRUNCATE语句
用户可以在现有表上实现TRUNCATE命令。我们已经讨论了实现TRUNCATE命令的语法。如下所示:
TRUNCATE TABLE table_name;
在实施TRUNCATE语句之前,用户必须创建一个表并向表中添加数据,以确保TRUNCATE命令成功执行。
要在MySQL中创建一个表,请使用CREATE TABLE命令。
CREATE TABLE demotable(
StudID int, S_Name varchar(100), S_Course varchar (50) );
以上查询将定义一个名为demo table的表,该表包含三个列StudentID、Student_Name和Student_Course。
接下来的步骤是将数据存储到已定义的表中。如果用户想要在表中插入记录,则用户需要执行INSERT语句。在demotable中添加数据的语法如下:
INSERT INTO table_name VALUES (value1, value2, value3…);
输入给定的查询以将数据插入到表中:
INSERT INTO demotable VALUES (1, 'AMAN', 'Mathematics');
INSERT INTO demotable VALUES (2, 'HARSH', 'Mathematics');
INSERT INTO demotable VALUES (3, 'RAHUL', 'Computer Science');
INSERT INTO demotable VALUES (4, 'ROHIT', 'English');
INSERT INTO demotable VALUES (5, 'VIJAY', 'Science');
在MySQL中实现以上5个SQL语句将在演示表中有以下五行信息。一旦数据值添加到表的相应列中,用户可以通过显示表中的所有记录来检查。
用户必须实施SELECT查询以查看表中存储的所有记录。显示demotable的查询如下:
SELECT * FROM demotable;
它将返回给定的输出:
检查后,所有的值都成功记录在表中。使用上述语法实现TRUNCATE语句以从表中删除所有记录。实现TRUNCATE命令的查询如下所示:
TRUNCATE TABLE demotable;
它将从表中删除所有现有数据。显示演示表中的记录,以确保TRUNCATE语句成功执行。您可以通过再次执行SELECT查询来检查是否从表中删除了所有数据。
SELECT * FROM demotable;
它不会返回任何数据来显示表格是空的。为了确保表格为空,请尝试在表格中插入新数据。您将看到它将成为demotable的第一个值。
INSERT INTO demotable VALUES (1, 'AMAN', 'Mathematics');
SELECT * FROM demotable;
输出:
使用DELETE关键字
用户还可以使用DELETE关键字来删除所有数据行,而不删除表定义。如果用户执行DELETE语句,它会确保表定义、属性和索引不受查询的影响。
DELETE语句的语法
DELETE FROM table_name;
实施DELETE语句
首先,为用户实施DELETE语句创建与上述相同的表。执行下面的查询来创建并向表中添加数据。
-- create
CREATE TABLE demotable(
StudID int, S_Name varchar(100), S_Course varchar (50) );
-- insert
INSERT INTO demotable VALUES (1, 'AMAN', 'Mathematics');
INSERT INTO demotable VALUES (2, 'HARSH', 'Mathematics');
INSERT INTO demotable VALUES (3, 'RAHUL', 'Computer Science');
INSERT INTO demotable VALUES (4, 'ROHIT', 'English');
INSERT INTO demotable VALUES (5, 'VIJAY', 'Science');
-- fetch
SELECT * FROM demotable;
一旦将值记录在表中,您可以通过执行SELECT查询来显示表中的记录来检查它们。
SELECT * FROM demotable;
输出:
最后使用delete关键字删除demotable中的所有记录。
DELETE FROM demotable;
上述语句将删除在demotable中存储的所有数据记录。表的定义保持不变。为了确保表为空,请尝试在表中插入新数据。您会发现它将成为demotable中的第一个值。
INSERT INTO demotable VALUES (1, 'HARSH', 'Mathematics');
SELECT * FROM demotable;
输出: