使用DML插入、更新、删除数据

本文介绍在AnalyticDB PostgreSQL数据库中,如何使用DML语法插入、更新、删除数据。

插入行(INSERT)

说明

如果要插入大量数据,推荐使用外部表或者COPY命令,相比INSERT性能更好。

使用INSERT命令在一个表中插入行。语法如下:

INSERT INTO table [( column [, ...] )]
   {DEFAULT VALUES | VALUES ( {expression | DEFAULT} [, ...] ) 
   [, ...] | query}

示例:

插入单行数据。

INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);

在一条命令中插入多行数据。

INSERT INTO products (product_no, name, price) VALUES
    (1, 'Cheese', 9.99),
    (2, 'Bread', 1.99),
    (3, 'Milk', 2.99);

使用标量表达式插入数据。

INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < 
'2016-05-07';

更新行(UPDATE)

使用UPDATE命令在一个表中更新行。语法如下:

UPDATE [ONLY] table [[AS] alias]
   SET {column = {expression | DEFAULT} |
   (column [, ...]) = ({expression | DEFAULT} [, ...])} [, ...]
   [FROM fromlist]
   [WHERE condition | WHERE CURRENT OF cursor_name ]

使用限制:

  • 分布键列不能被更新。

  • 分区键列不能被更新。

  • 不能在UPDATE语句中使用STABLE或VOLATILE函数。

  • 不支持RETURNING子句。

示例:

将所有价格为5的产品更新价格为10。

UPDATE products SET price = 10 WHERE price = 5;

删除行(DELETE)

使用DELETE命令从一个表中删除行。语法如下:

DELETE FROM [ONLY] table [[AS] alias]
      [USING usinglist]
      [WHERE condition | WHERE CURRENT OF cursor_name ]

使用限制:

  • 不能在DELETE语句中使用STABLE或VOLATILE函数。

  • 不支持RETURNING子句。

示例:

从产品表中删除所有价格为10的行。

DELETE FROM products WHERE price = 10;

从表中删除所有行。

DELETE FROM products;

截断表(TRUNCATE)

使用TRUNCATE命令可以快速地移除一个表中的所有行,TRUNCATE不扫描该表,因此它不会处理继承的子表或者ON DELETE的重写规则,只会截断命令中的表中的行。语法如下:

TRUNCATE [TABLE] name [, ...] [CASCADE | RESTRICT]

示例:

清空mytable表中的所有行。

TRUNCATE mytable;