开始使用 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;
管理表
以下简单介绍如何向表中插入数据和更新表中数据等相关操作。
向表中插入数据
在创建一个表后,表中并没有数据,在使用这个表之前,需要向表中插入数据。
- 创建表 customer36。
CREATE TABLE customer36 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6));
- 向表 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');
- 方法一:数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。
- 向表中插入多行数据。
INSERT INTO customer36 (c_customer_sk, c_customer_id, c_first_name) VALUES(6885, 'maps', 'Joes'), (4321, 'tpcds', 'Lily'), (9527, 'world', 'James');
如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现,但是建议使用此命令可以提升效率。 - 从指定表插入数据到当前表。例如,在数据库中创建了一个表 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 通常不会为数据行提供唯一标识,因此无法直接声明需要更新哪一行,但可以声明一个被更新的行必须满足的条件。如果表中有一个主键,可以指定准确的行。
- 更新表 customer36 中 c_customer_sk 为 9527 的地域为9876。
UPDATE customer36 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;
- 更新表中 c_customer_sk 字段的所有值为增加 100。
UPDATE customer36 SET c_customer_sk = c_customer_sk + 100;
在这里省略了 WHERE 子句,表示表中的所有行都要被更新。如果出现了 WHERE 子句,那么只有匹配其条件的行才会被更新。在 SET 子句中的等号是一个赋值,而在 WHERE 子句中的等号是比较。WHERE 条件不一定是相等测试,许多其他的操作符也可以使用。 - 更新表中的多个字段。
UPDATE customer36 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421;
查看数据
在查看数据之前,确保已经完成本文示例中向表中插入数据和更新表中数据的操作。
- 查询表 customer36 的数据行数。
SELECT count(*) FROM customer36;
返回结果如下:count ------- 6 (1 row)
- 查询表 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)
- 查询字段 c_customer_sk 的数据。
SELECT c_customer_sk FROM customer36;
返回结果如下:c_customer_sk --------------- 3869 3869 3869 6985 9976 4421 (6 rows)
- 过滤字段 c_customer_sk 的重复数据。
SELECT DISTINCT( c_customer_sk ) FROM customer36;
返回结果如下:c_customer_sk --------------- 9976 6985 3869 4421 (4 rows)
- 查询字段 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)
- 按照字段 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不能直接访问独立的行,只能通过声明被删除的行匹配的条件。如果表中有一个主键,可以指定准确的行。
- 删除表customer36中所有c_customer_sk为3869的记录。
DELETE FROM customer36 WHERE c_customer_sk = 3869;
- 删除表中所有的行。建议使用truncate,详情可参考TRUNCATE。
DELETE FROM customer37;
或者TRUNCATE TABLE customer37;
- 清理测试环境。
DROP TABLE customer36,customer37;
查看数据库对象
vsql 工具提供了元命令可帮助管理员查看数据库对象信息。有关元命令的详细信息,可查阅元命令参考。
常用的查看对象元命令如下:
查看帮助信息
\?
查看数据库
\l
列举表
\dt
查看表结构
\d tablename
列举 schema
\dn
查看索引
\di
切换数据库
\c dbname