Files
oceanbase/docs/docs-cn/2.quickstart/6.basic-operations/5.delete-data.md
2022-02-10 14:51:49 +08:00

3.3 KiB

删除数据

使用 DELETE 语句删除数据。

示例如下:

假设有如下所示数据的表 t1t2。其中,表 t2 为 KEY 分区表,且分区名由系统根据分区命令规则自动生成,即分区名为 p0p1p2p3

obclient> CREATE TABLE t1(c1 int primary key, c2 int);
Query OK, 0 rows affected (0.16 sec)
obclient> INSERT t1 VALUES(1,1),(2,2),(3,3),(4,4);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0
obclient> SELECT * FROM t1; 
+----+------+
| c1 | c2   |
+----+------+
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
|  4 |    4 |
+----+------+
4 rows in set (0.06 sec)

obclient> CREATE TABLE t2(c1 int primary key, c2 int) partition BY key(c1) partitions 4;
Query OK, 0 rows affected (0.19 sec)
obclient> INSERT INTO t2 VALUES(5,5),(1,1),(2,2),(3,3);
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0
obclient> SELECT * FROM t2;
+----+------+
| c1 | c2   |
+----+------+
|  5 |    5 |
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
+----+------+
4 rows in set (0.02 sec)
  • 单表删除,删除 c1=2 的行,其中 c1 列为表 t1 中的 Primary Key。

    obclient> DELETE FROM t1 WHERE c1 = 2;
    Query OK, 1 row affected (0.02 sec)
    
    obclient> SELECT * FROM t1;
    +----+------+
    | c1 | c2   |
    +----+------+
    |  1 |    1 |
    |  3 |    3 |
    |  4 |    4 |
    +----+------+
    3 rows in set (0.01 sec)
    
  • 单表删除,删除表 t1 中按照 c2 列排序之后的第一行数据。

    obclient> DELETE FROM t1 ORDER BY c2 LIMIT 1;
    Query OK, 1 row affected (0.01 sec)
    
    obclient> SELECT * FROM t1;
    +----+------+
    | c1 | c2   |
    +----+------+
    |  2 |    2 |
    |  3 |    3 |
    |  4 |    4 |
    +----+------+
    3 rows in set (0.00 sec)
    
  • 单表删除,删除表 t2p2 分区的数据。

    obclient> SELECT * FROM t2 PARTITION(p2); 
    +----+------+
    | c1 | c2   |
    +----+------+
    |  1 |    1 |
    |  2 |    2 |
    |  3 |    3 |
    +----+------+
    3 rows in set (0.01 sec)
    
    obclient> DELETE FROM t2  PARTITION(p2); 
    Query OK, 3 rows affected (0.02 sec)
    
    obclient> SELECT * FROM t2;
    +----+------+
    | c1 | c2   | 
    +----+------+
    |  5 |    5 |
    +----+------+
    1 row in set (0.02 sec)
    
  • 多表删除,删除 t1t2 表中 t1.c1 = t2.c1 的数据。

    obclient> DELETE t1, t2 FROM t1, t2 WHERE t1.c1 = t2.c1;
    Query OK, 3 rows affected (0.02 sec)
    
    obclient> SELECT * FROM t1;
    +----+------+
    | c1 | c2   |
    +----+------+
    |  4 |    4 |
    +----+------+
    1 row in set (0.01 sec)
    
    obclient> SELECT * FROM t2;
    +----+------+
    | c1 | c2   |
    +----+------+ 
    |  5 |    5 | 
    +----+------+
    1 row in set (0.01 sec)
    
  • 多表删除,删除 t1t2 表中 t1.c1 = t2.c1 的数据。

    obclient> DELETE FROM t1, t2 USING t1, t2 WHERE t1.c1 = t2.c1;
    Query OK, 4 rows affected (0.02 sec)
    
    obclient> SELECT * FROM t1;
    +----+------+
    | c1 | c2   |
    +----+------+
    |  4 |    4 |
    +----+------+
    1 row in set (0.01 sec)
    
    obclient> SELECT * FROM t2;
    Empty set (0.01 sec)
    

更多 DELETE 语句相关的语法说明请参见《SQL 参考(MySQL 模式)》中 DELETE章节。