VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

管理表

向表中插入数据

在创建一个表后,表中并没有数据,在使用这个表之前,需要向表中插入数据。本小节介绍如何使用Insert命令插入一行或多行数据,及从指定表插入数据。

示例

执行如下命令建立示例中需要使用的表customer_t1

CREATE TABLE customer_t1
(		
	c_customer_sk        integer, 
	c_customer_id        char(5), 
	c_first_name         char(6)
); 
  • 向表customer_t1中插入一行:

数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式

  INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', 'Grace');

如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同

  INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace');

如果用户不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。例如:

  INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace'); 
   
  INSERT INTO customer_t1 VALUES (3769, 'hello');
  • 如果需要在表中插入多行,请使用以下命令:

    INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES  
      (6885, 'maps', 'Joes'), 
      (4321, 'tpcds', 'Lily'), 
      (9527, 'world', 'James');
    

如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。

  • 如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表customer_t2中,则可以执行如下命令:

    CREATE TABLE customer_t2 
    ( 
      c_customer_sk             integer, 
      c_customer_id             char(5), 
      c_first_name              char(6), 
      c_last_name               char(8) 
    ); 
       
    INSERT INTO customer_t2 SELECT * FROM customer_t1;
    

更新表中数据

修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行,所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。

​ 使用UPDATE命令更新现有行,需要提供以下三种信息:

  • 表的名称和要更新的字段名

  • 字段的新值

  • 要更新哪些行

​ SQL通常不会为数据行提供唯一标识,因此无法直接声明需要更新哪一行。但是可以通过声明一个被更新的行必须满足的条件。只有在表里存在主键的时候,才可以通过主键指定一个独立的行。

示例

建立表和插入数据的步骤请参考“向表中插入数据”章节。

  • 需要将表customer_t1中c_customer_sk为9527的地域重新定义为9876

    UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;
    

这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是变量表达式。

  • 比如,把所有c_customer_sk的值增加100

    UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100;
    

在这里省略了WHERE子句,表示表中的所有行都要被更新。如果出现了WHERE子句,那么只有匹配其条件的行才会被更新。

在SET子句中的等号是一个赋值,而在WHERE子句中的等号是比较。WHERE条件不一定是相等测试,许多其他的操作符也可以使用。

  • 用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如:

    UPDATE customer_t1 SET  c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421; 
    

查看数据

示例

在以下示例执行前,需按照“向表中插入数据”章节,将示例对应数据表与数据进行创建与插入。

  • 执行如下命令查询表customer_t1的数据行数

    SELECT count(*) FROM customer_t1;
    
  • 执行如下命令查询表customer_t1的所有数据

    SELECT * FROM customer_t1;
    
  • 执行如下命令只查询字段c_customer_sk的数据

    SELECT c_customer_sk FROM customer_t1;
    
  • 执行如下命令过滤字段c_customer_sk的重复数据

    SELECT DISTINCT( c_customer_sk ) FROM customer_t1;
    
  • 执行如下命令查询字段c_customer_sk为3869的所有数据

    SELECT * FROM customer_t1 WHERE c_customer_sk = 3869;
    
  • 执行如下命令按照字段c_customer_sk进行排序

    SELECT * FROM customer_t1 ORDER BY c_customer_sk;
    

删除表中数据

在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。

SQL不能直接访问独立的行,只能通过声明被删除行匹配的条件进行。如果表中有一个主键,用户可以指定准确的行。用户可以删除匹配条件的一组行或者一次删除表中的所有行。

示例

在以下示例执行前,需按照“向表中插入数据”章节,将示例对应数据表与数据进行创建与插入。

  • 使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录:

    DELETE FROM customer_t1 WHERE c_customer_sk = 3869;
    
  • 如果执行如下命令之一,会删除表中所有的行

    DELETE FROM customer_t2;
    

  TRUNCATE TABLE customer_t2;

说明:全表删除的场景下,建议使用truncate,不建议使用delete。

  • 删除创建的表:

    DROP TABLE customer_t1;