在这里您将学到:

  • 使用 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 创建一个新表。

    PostgreSQL 创建表

    使用\d\dt命令在psql中列出当前数据库中的所有表。

    PostgreSQL 创建表

    使用\d table-name命令查看指定表的结构。它将列出表的所有列及其数据类型和约束。

    PostgreSQL 创建表

    使用 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命令查看新表和表结构,如下所示。

    PostgreSQL 创建表

    如果要创建具有选定列列表的表,则可以在 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 在单独的模式中创建临时表,因此在创建临时表时不能指定模式名称。
  • 在一个会话中创建的临时表仅限于该会话。同一数据库的另一个会话无法查看或访问前一个会话创建的临时表。
  • 临时表会在数据库会话结束时自动删除。
  • 临时表可以与数据库中的永久表同名,但不建议这样做。在这种情况下,每当您尝试访问该表时,它将始终引用临时表而不是永久表。仅当临时表被删除后,永久表才可访问。