暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于清空表

SQL新手 2022-12-08
266

OceanBase 数据库中的 MySQL 模式下清空某张表包含 DELETE 和 TRUNCATE 两种方式。

前提条件

当前用户需要对表具有 DELETE 权限。

DELETE 方式

描述

该语句用来删除表中符合条件的行,包括单表删除及多表删除两种方式。

语法

Single-Table-Delete Syntax:
    DELETE [hint_options] FROM tbl_name
    [PARTITION (partition_name,...)]
    [WHERE where_condition]
    [ORDER BY order_expression_list]
    [LIMIT row_count]

Multiple-Table-Delete Syntax:
    DELETE [hint_options] tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]
Or:
    DELETE [hint_options] FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
 
where_condition:
    expression

order_expression_list:
    order_expression [, order_expression ...]

order_expression:
    expression [ASC | DESC]

limit_row_count:
    INT_VALUE
  
table_references:
    {tbl_name | joined_table | table_subquery | select_with_parens} [, ...]
 

参数解释

参数描述
hint_options指定hint选项。
tbl_name指定需要删除的表名。
partition_name需要删除表的对应分区名。
where_condition删除的表需要满足的过滤条件。
order_expression_list删除的表的排序键列表。
row_count删除的表的行数指定,指定的值只能为整数。
table_references多表删除时指定的待选择的表序列。

示例

将 dws_ny 表的数据清空。

  1. 查询 dws_ny 表中的数据。

    obclient> SELECT * FROM dws_ny;
    +----+--------+------------+
    | id | name   | date       |
    +----+--------+------------+
    |  1 | 张三   | 0000-00-00 |
    |  2 | 李四   | 0000-00-00 |
    +----+--------+------------+
    2 rows in set
    
  2. 将 dws_ny 表的数据清空。

    obclient> DELETE FROM dws_ny;
    Query OK, 2 rows affected
    
  3. 运行后,再次查看 dws_ny 表。

    obclient> SELECT * FROM dws_ny;
    Empty set
    

TRUNCATE 方式

描述

该语句用于完全清空指定表,但是保留表结构,包括表中定义的 Partition 信息。从逻辑上说,该语句与用于删除所有行的 DELETE FROM 语句相同。执行 TRUNCATE 语句,必须具有表的删除和创建权限。它属于 DDL 语句。

TRUNCATE TABLE 语句与 DELETE FROM 语句有以下不同:

  • 删减操作会取消并重新创建表,这比一行一行的删除行要快很多。

  • TRUNCATE TABLE 语句执行结果显示影响行数始终显示为 0 行。

  • 使用 TRUNCATE TABLE 语句,表管理程序不记得最后被使用的 AUTO_INCREMENT 值,但是会从头开始计数。

  • TRUNCATE 语句不能在进行事务处理和表锁定的过程中进行,如果使用,将会报错。

  • 只要表定义文件是合法的,则可以使用 TRUNCATE TABLE 把表重新创建为一个空表,即使数据或索引文件已经被破坏。

语法

TRUNCATE [TABLE] table_name;

参数解释

参数描述
table_name指定表名。

示例

将 t1 表的数据清空。

  1. 查询 t1 表中的数据。

    obclient>  SELECT * FROM t1;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | 张三   |   22 |
    |  2 | 李四   |   33 |
    +----+--------+------+
    2 rows in set
    
  2. 将 t1 表的数据清空。

    obclient> TRUNCATE t1;
    Query OK, 0 rows affected
    
  3. 运行后,再次查看 t1 表。

    obclient>  SELECT * FROM t1;
    Empty set
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论