开始使用 VexDB

本文介绍使用 VexDB 时的基本操作。

在开始使用数据库之前,确保您已经顺利安装、启动并连接到数据库。

通过阅读本节,您可以完成以下操作:

创建数据库

数据库安装完成后,默认包含名称为 postgres 的数据库。

  • 创建一个新的数据库 testdb1。
    CREATE DATABASE testdb1;
    

    新的数据库默认将通过复制标准系统数据库模板 template0 来创建。
  • 创建数据库 testdb2,并指定所有者为 dbuser。
    步骤1:创建用户。
    CREATE USER dbuser PASSWORD Vbase@123;
    

    步骤2:创建数据库。
    CREATE DATABASE testdb2 OWNER dbuser TEMPLATE template0;
    
  • 查看数据库列表(vsql 客户端可用)
    \l
    

创建表

以下简单介绍如何在数据库中创建表。

  • 创建普通表。
    CREATE TABLE customer_t1
    (
    c_customer_sk integer not null,
    c_customer_id char(6) not null,
    c_first_name varchar(20) ,
    c_last_name varchar(20) , 
    c_country varchar(20)
    );
    
  • 创建表,并指定 c_state 字段的缺省值为 GA。
    CREATE TABLE customer_t2
    (
    c_customer_sk integer not null,
    c_customer_id char(6) not null,
    c_first_name varchar(20) ,
    c_last_name varchar(20) ,
    c_state CHAR(2) DEFAULT 'GA', 
    c_country varchar(20)
    );
    
  • 执行元命令列举表。常见的查看对象元命令可参考查看对象。
    \dt
    
  • 执行元命令查看表结构。
    \d customer_t2
    
  • 创建一个有主键约束的表。
    CREATE TABLE customer_t3
    (
    c_customer_sk integer PRIMARY KEY,
    c_customer_id char(6) not null,
    c_first_name varchar(20) ,
    c_last_name varchar(20) , 
    c_country varchar(20)
    );
    
  • 向表中增加一个 varchar 列。
    ALTER TABLE customer_t1 ADD c_company varchar(30);
    
  • 删除表
    DROP TABLE customer_t1;
    DROP TABLE customer_t2;
    DROP TABLE customer_t3;
    

管理表

以下简单介绍如何向表中插入数据和更新表中数据等相关操作。

向表中插入数据

在创建一个表后,表中并没有数据,在使用这个表之前,需要向表中插入数据。

  1. 创建表 customer36。
    CREATE TABLE customer36
    (
    c_customer_sk integer,
    c_customer_id char(5),
    c_first_name char(6));
    
  2. 向表 customer36 中插入一行数据。
    • 方法一:数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。
      INSERT INTO customer36(c_customer_sk, c_customer_id, c_first_name)
      VALUES (3769, 'hello', 'Grace');
      
    • 方法二:如果已经知道表中字段的顺序,也可无需列出表中的字段。
      INSERT INTO customer36 VALUES (3769, 'hello', 'Grace');
      
    • 方法三:如果不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。
      INSERT INTO customer36 (c_customer_sk, c_first_name) VALUES (3769, 'Grace');
      
  3. 向表中插入多行数据。
    INSERT INTO customer36 (c_customer_sk, c_customer_id, c_first_name) VALUES(6885, 'maps', 'Joes'), (4321, 'tpcds', 'Lily'), (9527, 'world', 'James');
    

    如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现,但是建议使用此命令可以提升效率。
  4. 从指定表插入数据到当前表。例如,在数据库中创建了一个表 customer36 的备份表 customer37,现在需要将表 customer36 中的数据插入到表 customer37 中,则可以执行如下命令。
    CREATE TABLE customer37
    (
    c_customer_sk integer,
    c_customer_id char(5),
    c_first_name char(6)
    );
    
    INSERT INTO customer37 SELECT * FROM customer36;
    

更新表中数据

根据需要,可以更新单独一行,所有行或者指定部分行的表中数据。还可以独立更新每个字段,其他字段则不受影响。

说明

SQL 通常不会为数据行提供唯一标识,因此无法直接声明需要更新哪一行,但可以声明一个被更新的行必须满足的条件。如果表中有一个主键,可以指定准确的行。

  1. 更新表 customer36 中 c_customer_sk 为 9527 的地域为9876。
    UPDATE customer36 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;
    
  2. 更新表中 c_customer_sk 字段的所有值为增加 100。
    UPDATE customer36 SET c_customer_sk = c_customer_sk + 100;
    

    在这里省略了 WHERE 子句,表示表中的所有行都要被更新。如果出现了 WHERE 子句,那么只有匹配其条件的行才会被更新。在 SET 子句中的等号是一个赋值,而在 WHERE 子句中的等号是比较。WHERE 条件不一定是相等测试,许多其他的操作符也可以使用。
  3. 更新表中的多个字段。
    UPDATE customer36 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421;
    

查看数据

在查看数据之前,确保已经完成本文示例中向表中插入数据和更新表中数据的操作。

  1. 查询表 customer36 的数据行数。
    SELECT count(*) FROM customer36;
    

    返回结果如下:
    count
    -------
        6
    (1 row)
    
  2. 查询表 customer36 的所有数据。如果没有完成向表中插入数据中重复插入数据的操作,以下步骤的返回结果可能略有差异。
    SELECT * FROM customer36;
    

    返回结果如下:
    c_customer_sk | c_customer_id | c_first_name
    --------------+---------------+--------------
             3869 | hello         | Grace
             3869 | hello         | Grace
             3869 |               | Grace
             6985 | maps          | Joes
             9976 | world         | James
             4421 | Admin         | Local
    (6 rows)
    
  3. 查询字段 c_customer_sk 的数据。
    SELECT c_customer_sk FROM customer36;
    

    返回结果如下:
    c_customer_sk
    ---------------
            3869
            3869
            3869
            6985
            9976
            4421
    (6 rows)
    
  4. 过滤字段 c_customer_sk 的重复数据。
    SELECT DISTINCT( c_customer_sk ) FROM customer36;
    

    返回结果如下:
    c_customer_sk
    ---------------
            9976
            6985
            3869
            4421
    (4 rows)
    
  5. 查询字段 c_customer_sk 为 3869 的所有数据。
    SELECT * FROM customer36 WHERE c_customer_sk = 3869;
    

    返回结果如下:
    c_customer_sk | c_customer_id | c_first_name
    ---------------+---------------+--------------
            3869 | hello         | Grace
            3869 | hello         | Grace
            3869 |               | Grace
    (3 rows)
    
  6. 按照字段 c_customer_sk 进行排序。
    SELECT * FROM customer36 ORDER BY c_customer_sk;
    

    返回结果如下:
     c_customer_sk | c_customer_id | c_first_name
    ---------------+---------------+--------------
              3869 | hello         | Grace
              3869 | hello         | Grace
              3869 |               | Grace
              4421 | Admin         | Local
              6985 | maps          | Joes
              9976 | world         | James
     (6 rows)
    

删除表中数据

在删除表中数据之前,确保已经完成本文示例中向表中插入数据和更新表中数据的操作。

根据需要可以删除匹配条件的一组行或者一次删除表中的所有行。

说明

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

  1. 删除表customer36中所有c_customer_sk为3869的记录。
    DELETE FROM customer36 WHERE c_customer_sk = 3869;
    
  2. 删除表中所有的行。建议使用truncate,详情可参考TRUNCATE。
    DELETE FROM customer37;
    

    或者
    TRUNCATE TABLE customer37;
    
  3. 清理测试环境。
    DROP TABLE customer36,customer37;
    

查看数据库对象

vsql 工具提供了元命令可帮助管理员查看数据库对象信息。有关元命令的详细信息,可查阅元命令参考

常用的查看对象元命令如下:

查看帮助信息

\?

查看数据库

\l

列举表

\dt

查看表结构

\d tablename

列举 schema

\dn

查看索引

\di

切换数据库

\c dbname

需要帮助?

扫码添加企业微信
获得专业技术支持

企业微信二维码
🎯 快速响应💡 专业解答