在 MySQL 中用条件截断?

mysqlmysqli database

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

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

DELETE FROM yourTableName WHERE youCondition;

上述语法很好,但如果您想要更快的解决方案,那么与 Truncate 相比,DELETE 并不好。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 的记录都从表中删除。


相关文章