表定义基础
关系型数据库中的表就像纸上的表格:由行和列组成。列的数量和顺序是固定的,每列都有名称;行数是可变的,表示当前存储了多少数据。SQL 不保证表中行的顺序,当读取表时,除非显式指定排序条件,行的顺序是未定义的。此外,SQL 不会自动为每行分配唯一标识符,因此一个表中可能包含多行完全相同的数据。
每一列都有对应的数据类型。数据类型限制了可以赋值给该列的内容范围,并赋予数据特定的语义,使其能用于计算。例如,声明为数值类型的列不能接受任意文本字符串,且存储的数据可以用于数学运算。相反,声明为字符串 类型的列几乎可以存储任何数据,但不适用于数学计算(不过可以进行字符串拼接等操作)。
Apache Cloudberry 提供了大量内置数据类型,适用于各种应用场景,也支持用户自定义数据类型。大多数内置数据类型的名称和语义都很直观。常用的类型包括用于整数的 integer
,用于小数的 numeric
,用于字符文本的 text
,用于日期的 date
,用于一天中时间的 time
,以及包含日期和时间的 timestamp
。
创建表时使用 CREATE TABLE
命令。在该命令中,至少需要指定表名、每一列的名称以及对应的数据类型。例如:
CREATE TABLE my_first_table (
first_column text,
second_column integer
);
这个命令会创建一个名为 my_first_table
的表,包含两列:第一列名为 first_column
,类型为 text
;第二列名为 second_column
,类型为 integer
。表名和列名遵循 PostgreSQL 文档中 标识符和关键字 所述的标识符语法。类型名通常也是标识符,但也有例外。列的定义以逗号分隔,并用圆括号括起来。
通常建议根据表和列中存储的数据选择有意义的名称,例如:
CREATE TABLE products (
product_no integer,
name text,
price numeric
);
(numeric
类型支持小数,适合用于存储金额等字段。)
如果需要创建多个有关联的表,建议为表和列使用统一的命名风格。例如,可以统一使用单数或复数形式作为表名。
Apache Cloudberry 限制了表中可包含的列数。根据列类型的不同,最大列数范围在 250 到 1600 之间。接近最大列数的设计通常不常见,且在大多数情况下不合理。
如果不再需要某个表,可以使用 DROP TABLE
命令将其删除。例如:
DROP TABLE my_first_table;
DROP TABLE products;