在这里您将学到:
- 使用 CREATE TABLE 语句创建表
- 使用 CREATE TABLE AS 语句创建表
- 创建临时表
使用 CREATE TABLE 语句创建表
表是关系数据库中存储结构化数据的基本结构。 CREATE TABLE 语句用于在数据库中创建新表。以下是创建新表的语法。
CREATE TABLE [IF NOT EXISTS] <table_name> (
<column1> <data_type(length)> [column_contraint],
<column2> <data_type(length)> [column_contraint],
...
<columnN> <data_type(length)> [column_contraint],
[table_constraints]
);
在上面的语法中,
- 在 CREATE TABLE 之后,您可以指定可选的 IF NOT EXISTS 子句,该子句仅在表不存在时才创建表。如果表已经存在,Postgres只会给出警告而不是错误并跳过创建新表。
- table_name 是您要创建的表的唯一名称。
- 在列的定义行中,指定列名称列表及其数据类型。
data_type
是列将要存储的数据类型,例如字符串、整数、日期等。 指定可选的[comlumn_constraint]
,例如NOT NULL、Check、Unique、Primary Key、Foreign Key等。 - 指定可选的表级约束,例如NULL、主键、外键、检查约束。
以下内容使用 psql 在 PostgreSQL 数据库中创建一个新的 person
表。
CREATE TABLE IF NOT EXISTS person (
Id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
gender CHAR(1),
birthdate DATE,
email_id VARCHAR(100) UNIQUE,
country_of_birth VARCHAR(50)
);
以下内容使用 psql 创建一个新表。
使用\d
或\dt
命令在psql中列出当前数据库中的所有表。
使用\d table-name
命令查看指定表的结构。它将列出表的所有列及其数据类型和约束。
使用 CREATE TABLE AS 语句创建表
使用 CREATE TABLE AS 语句使用指定 SELECT 查询中的数据创建新表。表的列和数据类型将与 SELECT 查询的结果相同。它将把 SELECT 查询返回的记录添加到表中。
CREATE TABLE [IF NOT EXISTS] <table_name>
[(<column1>, <column2>, ...)]
AS
<Query>;
下面将创建 EMPLOYEE
表,其列名和数据类型与从 person
表中选择数据的 SELECT 查询相同。
CREATE TABLE employee
AS
SELECT * FROM person;
使用\dt
和\demployee
命令查看新表和表结构,如下所示。
如果要创建具有选定列列表的表,则可以在 SELECT 子句中仅选择所需的列。
CREATE TABLE employee
AS SELECT ID, FIRST_NAME, LAST_NAME, GENDER FROM person;
如果您希望列名与 SELECT 查询列不同,您可以指定新的列列表。
CREATE TABLE employee(EmployeeId, FirstName, LastName, Gender)
AS SELECT ID, FIRST_NAME, LAST_NAME, GENDER FROM person;
为了避免建表时如果表已经存在而出现错误,可以在建表时指定IF NOT EXISTS子句。
CREATE TABLE IF NOT EXISTS employee
AS SELECT * FROM person;
创建临时表
Postgres 允许我们创建临时表。临时表仅在数据库会话期间存在。 一旦我们与数据库会话断开连接,Postgres 就会删除所有临时表。
使用CREATE TEMPORARY TABLE
语句在当前数据库中创建一个新的临时表。
您可以互换使用 TEMPORARY 或 TEMP 关键字。
CREATE TEMPORARY TABLE [IF NOT EXISTS] <table_name> (
<column1> <data_type(length)> [column_contraint],
<column2> <data_type(length)> [column_contraint],
...
<columnN> <data_type(length)> [column_contraint],
[table_constraints]
);
下面将创建一个临时表myTempTble
。请注意,我们使用了 IF NOT EXISTS 语句,因此如果表已经存在,那么 Postgres 将仅给出警告并跳过表创建。
CREATE TEMPORARY TABLE IF NOT EXISTS myTempTble(
Id INT,
name VARCHAR(50)
);
- Postgres 在单独的模式中创建临时表,因此在创建临时表时不能指定模式名称。
- 在一个会话中创建的临时表仅限于该会话。同一数据库的另一个会话无法查看或访问前一个会话创建的临时表。
- 临时表会在数据库会话结束时自动删除。
- 临时表可以与数据库中的永久表同名,但不建议这样做。在这种情况下,每当您尝试访问该表时,它将始终引用临时表而不是永久表。仅当临时表被删除后,永久表才可访问。