海量数据库使用操作

海量数据库-vastbase G100使用操作

文章目录

使用vsql本地连接数据库

步骤1 以操作系统用户vastbase登录数据库实例所在主机。

步骤2 使用vsql连接本地数据库。

复制代码
vsql -d vastbase -p 5432
  • vastbase:需要连接的数据库名称,安装完成后,默认生成名称为vastbase的数据库,实际登录时请根据具体情况替换。
  • 5432:数据库的端口号,实际登录时请根据具体情况替换。

步骤3 首次登陆时修改密码。

  • (管理员首次登录时)如果用户的数据库版本是2.2(Build 5.75)及以上且角色是系统管理员(vbadmin)、安全管理员(vbsso)或者审计管理员(vbaudit),首次登录时系统会强制要求修改口令,修改语法如下:

    复制代码
    ALTER ROLE 用户名 IDENTIFIED BY '新口令' REPLACE '原随机口令';

    其中原随机口令表示:

    • 实例化数据库安装:安装过程中会生成随机口令作为管理员初始口令,显示信息如下:

      数据库三个默认管理员vbaudit、vbsso、vbadmin的默认口令为:
      系统管理员[vbadmin] 初始密码: A4b&b858
      安全管理员[vbsso] 初始密码: U6/f305f
      审计管理员[vbaudit] 初始密码: E5b44f8-

​ 首次登录数据库,需要自行修改口令后才可以正常操作数据库,修改实例:

复制代码
ALTER ROLE vbadmin IDENTIFIED BY 'Huayu123' REPLACE 'A4b&b858';

步骤4 退出数据库。

复制代码
\q

创建数据库

功能描述

数据库安装完成后,默认生成名称为vastbase的数据库。用户需要自己创建一个新的数据库。默认情况下新数据库将通过复制标准系统数据库template0来创建,且仅支持使用template0来创建。

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

    CREATE DATABASE testdb1;

  • 创建角色(用户)
    在 VastBase 中,你需要先创建名为 dbuser 的角色(如果还未创建的话)。可以使用以下命令来创建角色:

    CREATE ROLE dbuser WITH LOGIN PASSWORD 'Huayu123';

    注释

    CREATE ROLE 语句用于创建一个新的角色。
    WITH LOGIN 表示这个角色可以用于登录数据库,也就是相当于创建了一个具有登录权限的用户。
    PASSWORD 'your_password' 用于设置该角色(用户)的登录密码

  • 用模板template0创建数据库testdb2,并指定所有者为dbuser。

    CREATE DATABASE testdb2 OWNER dbuser TEMPLATE template0;

  • 查看数据库(vsql客户端可用)。

    \l

    vastbase=# \l
    数据库库列表
    名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存
    权限
    -----------+----------+----------+------------+------------+----------

    postgres | vastbase | UTF8 | en_US.utf8 | en_US.utf8 |
    template0 | vastbase | UTF8 | en_US.utf8 | en_US.utf8 | =c/vastba
    se +
    | | | | | vastbase=
    CTc/vastbase
    template1 | vastbase | UTF8 | en_US.utf8 | en_US.utf8 | =c/vastba
    se +
    | | | | | vastbase=
    CTc/vastbase
    testdb1 | vastbase | UTF8 | en_US.utf8 | en_US.utf8 |
    testdb2 | dbuser | UTF8 | en_US.utf8 | en_US.utf8 |
    vastbase | vastbase | UTF8 | en_US.utf8 | en_US.utf8 |
    (6 行记录)

  • 修改将testdb1数据库名称修改为testdb3。

    ALTER DATABASE testdb1 RENAME TO testdb3;

  • 删除数据库testdb3。

    DROP DATABASE testdb3;

创建表

表是建立在数据库中的,在不同的数据库中可以存放相同的表。甚至可以通过 使用模式在同一个数据库中创建相同名称的表。

  • 创建简单的表。

    CREATE TABLE public.warehouse_t1(
    W_WAREHOUSE_SK INTEGER NOT NULL,
    W_WAREHOUSE_ID CHAR(16) NOT NULL,
    W_WAREHOUSE_NAME VARCHAR(20) ,
    W_WAREHOUSE_SQ_FT INTEGER ,
    W_COUNTRY VARCHAR(20) ,
    W_GMT_OFFSET DECIMAL(5,2)
    );

  • 创建表,并指定W_STATE字段的缺省值为GA。

    CREATE TABLE public.warehouse_t2
    (
    W_WAREHOUSE_SK INTEGER NOT NULL,
    W_WAREHOUSE_ID CHAR(16) NOT NULL,
    W_COUNTY VARCHAR(30) ,
    W_STATE CHAR(2) DEFAULT 'GA',
    W_ZIP CHAR(10) ,
    W_COUNTRY VARCHAR(20) ,
    W_GMT_OFFSET DECIMAL(5,2)
    );

  • 创建一个带有70%填充因子的表。

    CREATE TABLE public.warehouse_t3
    (
    W_WAREHOUSE_SK INTEGER NOT NULL,
    W_COUNTRY VARCHAR(20) ,
    W_GMT_OFFSET DECIMAL(5,2)
    ) WITH(fillfactor=70);

  • 创建表,并指定该表数据不写入预写日志。

    CREATE UNLOGGED TABLE public.warehouse_t4
    (
    W_WAREHOUSE_SK INTEGER NOT NULL,
    W_COUNTRY VARCHAR(20) ,
    W_GMT_OFFSET DECIMAL(5,2)
    );

  • 创建表临时表。

    CREATE TEMPORARY TABLE warehouse_t5
    (
    W_WAREHOUSE_SK INTEGER NOT NULL,
    W_COUNTRY VARCHAR(20) ,
    W_GMT_OFFSET DECIMAL(5,2)
    );

  • 创建表时,指定表空间PG_DEFAULT。

    CREATE TABLE public.warehouse_t6
    (
    W_ID INTEGER NOT NULL,
    W_NAME VARCHAR(20) ,
    W_MAIL VARCHAR(40)
    ) TABLESPACE PG_DEFAULT;

  • 创建一个有主键约束的表。

    CREATE TABLE public.warehouse_t7
    (
    W_WAREHOUSE_SK INTEGER PRIMARY KEY,
    W_WAREHOUSE_ID CHAR(16) NOT NULL,
    W_COUNTRY VARCHAR(20) ,
    W_GMT_OFFSET DECIMAL(5,2)
    );

  • 创建一个有复合主键约束的表。

    CREATE TABLE public.warehouse_t8
    (
    W_WAREHOUSE_SK INTEGER NOT NULL,
    W_WAREHOUSE_ID CHAR(16) NOT NULL,
    W_WAREHOUSE_NAME VARCHAR(20),
    W_COUNTRY VARCHAR(20),
    W_GMT_OFFSET DECIMAL(5,2),
    CONSTRAINT W_CSTR_KEY2 PRIMARY KEY(W_WAREHOUSE_SK, W_WAREHOUSE_ID)
    );

  • 定义一个检查列约束。

    CREATE TABLE public.warehouse_t9
    (
    W_WAREHOUSE_SK INTEGER CHECK (W_WAREHOUSE_SK > 0),
    W_WAREHOUSE_ID CHAR(16) NOT NULL,
    W_WAREHOUSE_NAME VARCHAR(20) CHECK (W_WAREHOUSE_NAME IS NOT NULL),
    W_WAREHOUSE_SQ_FT INTEGER ,
    W_GMT_OFFSET DECIMAL(5,2)
    );

  • 向表中增加一个varchar列。

    ALTER TABLE public.warehouse_t1 ADD W_GOODS_CATEGORY varchar(30);

  • 给表增加一个检查约束。

    ALTER TABLE public.warehouse_t2 ADD CONSTRAINT W_CONSTR_KEY4 CHECK (W_WAREHOUSE_SK >10);

  • 给一个已存在字段添加非空约束。

    ALTER TABLE public.warehouse_t3 ALTER COLUMN W_COUNTRY SET NOT NULL;

  • 重命名已存在的表。

    ALTER TABLE public.warehouse_t4 RENAME TO newtab;

  • 删除表。

    DROP TABLE public.warehouse_t1;
    DROP TABLE public.warehouse_t2;
    DROP TABLE public.warehouse_t3;

管理表

向表中插入数据

在创建一个表后,表中并没有数据,在使用这个表之前,需要向表中插入数据。本小节介绍如何使用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;

    返回结果为:

    sql 复制代码
    count
    -------
        7
    (1 row)
  • 执行如下命令查询表customer_t1的所有数据。

    复制代码
    SELECT * FROM customer_t1;

    返回结果为:

    sql 复制代码
    c_customer_sk | c_customer_id | c_first_name
    ---------------+---------------+--------------
            3869 | hello         | Grace
            3869 | hello         | Grace
            3869 |               | Grace
            3869 | hello         |
            6985 | maps          | Joes
            9976 | world         | James
            4421 | Admin         | Local
    (7 rows)
  • 执行如下命令只查询字段c_customer_sk的数据。

    复制代码
    SELECT c_customer_sk FROM customer_t1;

    返回结果为:

    sql 复制代码
    c_customer_sk
    ---------------
            3869
            3869
            3869
            3869
            6985
            9976
            4421
    (7 rows)
  • 执行如下命令过滤字段c_customer_sk的重复数据。

    复制代码
    SELECT DISTINCT( c_customer_sk ) FROM customer_t1;

    返回结果为:

    sql 复制代码
    c_customer_sk
    ---------------
            9976
            6985
            3869
            4421
    (4 rows)
  • 执行如下命令查询字段c_customer_sk为3869的所有数据。

    复制代码
    SELECT * FROM customer_t1 WHERE c_customer_sk = 3869;

    返回结果为:

    sql 复制代码
    c_customer_sk | c_customer_id | c_first_name
    ---------------+---------------+--------------
            3869 | hello         | Grace
            3869 | hello         | Grace
            3869 |               | Grace
            3869 | hello         |
    (4 rows)
  • 执行如下命令按照字段c_customer_sk进行排序。

    复制代码
    SELECT * FROM customer_t1 ORDER BY c_customer_sk;

    返回结果为:

    sql 复制代码
    c_customer_sk | c_customer_id | c_first_name
    ---------------+---------------+--------------
            3869 | hello         |
            3869 | hello         | Grace
            3869 |               | Grace
            3869 | hello         | Grace
            4421 | Admin         | Local
            6985 | maps          | Joes
            9976 | world         | James
    (7 rows)

删除表中数据

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

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

示例

在以下示例执行前,需按照本文开头管理表中的步骤对应数据表与数据进行创建与插入。

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

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

    复制代码
    DELETE FROM customer_t2;

    或者

    sql 复制代码
    TRUNCATE TABLE customer_t2;

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

  • 删除创建的表:

    复制代码
    DROP TABLE customer_t1;

查看帮助信息

使用\?查看所有可执行的命令,使用此命令输出结果较多,会分屏显示,可以按空格键分页,按q退出当前内容查看。

复制代码
\?

查看数据库

复制代码
\l

列举表

复制代码
\dt

查看表结构

复制代码
\d tablename

列举schema

复制代码
\dn

查看索引

复制代码
\di

切换数据库

复制代码
\c dbname

总结

vsql连接

复制代码
vsql -h <IP地址> -p <端口号> -d <数据库名> -U <用户名>

创建数据库

复制代码
CREATE DATABASE 数据库名

创建角色

复制代码
CREATE  ROLE 角色名 WITH LOGIN PASSWORD '密码';

修改权限

复制代码
ALTER USER 角色名 CREATEROLE;

管理员权限

复制代码
grant all privileges TO lfx;

创建表

复制代码
CREATE  TABLE 表名(字段 数据类型);

插入数据

复制代码
INSERT INTO 表名(字段) VALUES (数据);

更新数据

复制代码
UPDATE 表名 SET 字段 = 字段 + 100

查看表数据

复制代码
SELECT * FROM 表名;

删除表字段数据

复制代码
DELETE FROM 表名 字段 = xx;

删除表

复制代码
DROP TABLE 表名;

创建索引

复制代码
CREATE INDEX 索引名 ON 表(字段)

查看索引

复制代码
\di+ 表名
相关推荐
松涛和鸣3 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
likangbinlxa4 小时前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k4 小时前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦4 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL5 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·5 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德5 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫6 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i6 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.6 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql