在 MySQL 中使用条件截断?


在 MySQL 中,没有办法使用条件进行截断。不能将 truncate 语句与 where 子句一起使用。

如果需要指定条件,请使用 delete 命令 −

DELETE FROM yourTableName WHERE youCondition;

上面的语法是正确的,但如果你需要一个更快的解决方案,DELETE 就比 Truncate 差。truncate 的优点是不写入日志。

让我们创建一个表。创建表的查询如下 −

mysql> create table DeleteDemo
   -> (
   -> Id int,
   -> Name varchar(100)
   -> );
Query OK, 0 rows affected (1.22 sec)

使用 insert 命令在表中插入一些记录。查询如下 −

mysql> insert into DeleteDemo values(101,'Carol');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DeleteDemo values(102,'Sam');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DeleteDemo values(103,'Bob');
Query OK, 1 row affected (0.16 sec)

mysql> insert into DeleteDemo values(104,'Mike');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DeleteDemo values(105,'John');
Query OK, 1 row affected (0.09 sec)

mysql> insert into DeleteDemo values(106,'Maria');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DeleteDemo values(107,'Johnson');
Query OK, 1 row affected (0.17 sec)

让我们现在使用 select 命令从表中显示所有记录。查询如下 −

mysql> select *from DeleteDemo;

输出

+------+---------+
| Id   | Name    |
+------+---------+
|  101 | Carol   |
|  102 | Sam     |
|  103 | Bob     |
|  104 | Mike    |
|  105 | John    |
|  106 | Maria   |
|  107 | Johnson |
+------+---------+
7 rows in set (0.00 sec)

现在你可以使用 delete 命令,但不会使用 where 子句进行截断。使用 where 子句从表中删除记录的查询如下 −

mysql> delete from DeleteDemo where Id>104;
Query OK, 3 rows affected (0.13 sec)

让我们再次使用 select 命令查看表数据。查询如下 −

mysql> select *from DeleteDemo;

输出

+------+-------+
| Id   | Name  |
+------+-------+
|  101 | Carol |
|  102 | Sam   |
|  103 | Bob   |
|  104 | Mike  |
+------+-------+
4 rows in set (0.00 sec)

查看上面的示例输出,所有大于 104 的记录都将从表中删除。

更新于: 30-Jul-2019

1K+ 次浏览

启动你的 职业生涯

通过完成该课程来获得认证

开始
广告