开发者社区 问答 正文

如何使用TRUNCATE TABLE数据定义语言

格式 TRUNCATE [TABLE] tblname;

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

  • 删减操作会取消并重新创建表,这比一行一行的删除行要快很多。
  • TRUNCATE TABLE语句执行结果显示影响行数始终显示为0行。
  • 使用TRUNCATE TABLE语句,表管理程序不记得最后被使用的AUTO_INCREMENT值,但是会从头开始计数。
  • TRUNCATE语句不能在进行事务处理和表锁定的过程中进行,如果使用,将会报错。
  • 只要表定义文件是合法的,则可以使用TRUNCATE TABLE把表重新创建为一个空表,即使数据或索引文件已经被破坏。

示例
创建分区表: Oceanbase>create table tp(a int, b int) partition by hash(a) partitions 7;
Query OK, 0 rows affected (0.37 sec)

Oceanbase>show create table tp;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                         |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tp    | CREATE TABLE `tp` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) DEFAULT CHARSET = utf8mb4 REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE partition by hash(a) partitions 7 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


插入若干条数据: Oceanbase>insert into tp values(1,2);
Query OK, 1 row affected (0.02 sec)

Oceanbase>insert into tp values(2,2);
Query OK, 1 row affected (0.04 sec)

Oceanbase>insert into tp values(3,2);
Query OK, 1 row affected (0.02 sec)

Oceanbase>insert into tp values(5,2);
Query OK, 1 row affected (0.01 sec)

Oceanbase>insert into tp values(6,2);
Query OK, 1 row affected (0.01 sec)


Oceanbase>select * from tp;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    2 |    2 |
|    3 |    2 |
|    5 |    2 |
|    6 |    2 |
+------+------+
5 rows in set (0.02 sec)


truncate 分区表: Oceanbase>truncate tp;
Query OK, 0 rows affected (0.46 sec)

Oceanbase>select * from tp;
Empty set (0.04 sec)

Oceanbase>show create table tp;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                         |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tp    | CREATE TABLE `tp` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) DEFAULT CHARSET = utf8mb4 REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE partition by hash(a) partitions 7 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

展开
收起
云栖大讲堂 2017-11-01 15:41:48 2396 分享 版权
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: