PostgreSQL 教程: CREATE TABLE 创建表

九月 8, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的CREATE TABLE语句创建新表。

PostgreSQL CREATE TABLE 语法

关系数据库由多个相关表组成。表格由行和列组成。表允许您存储结构化数据,例如客户、产品、员工等。

要创建新表,请使用CREATE TABLE语句。下面说明了CREATE TABLE语句的基本语法:

CREATE TABLE [IF NOT EXISTS] table_name (
   column1 datatype(length) column_contraint,
   column2 datatype(length) column_contraint,
   column3 datatype(length) column_contraint,
   table_constraints
);

在这个语法中:

  • 首先,在CREATE TABLE关键字后指定表的名称。
  • 其次,创建一个已经存在的表会导致错误。IF NOT EXISTS选项允许您,仅当新表不存在时才创建新表。当您使用IF NOT EXISTS选项并且表已存在时,PostgreSQL 会发出通知而不是错误并跳过创建新表。
  • 第三,指定以逗号分隔的表列列表。每列由列名、列存储的数据类型、数据长度和列约束组成。列约束指定存储在列中的数据必须遵循的规则。例如,非空约束强制列中的值不能为 NULL。列约束包括非空、唯一、主键、检查、外键约束。
  • 最后,指定表约束,包括主键、外键和检查约束。

请注意,某些表约束可以定义为列约束,例如主键、外键、检查、唯一约束。

约束

PostgreSQL 包含以下列约束:

  • NOT NULL – 确保列中的值不能为NULL
  • UNIQUE – 确保同一表中各行中某一列的值是唯一的。
  • PRIMARY KEY – 主键列唯一标识表中的行。一张表只能有一个主键。主键约束允许您定义表的主键。
  • CHECKCHECK约束确保数据必须满足布尔表达式。
  • FOREIGN KEY – 确保一个表中的一列或一组列中的值存在于另一个表中的一列或一组列中。与主键不同,一个表可以有许多外键。

表约束与列约束类似,只不过它们应用于多个列。

PostgreSQL CREATE TABLE 示例

我们将创建一个名为accounts的新表,其中包含以下列:

  • user_id – 主键
  • username – 唯一且非空
  • password – 非空
  • email – 唯一且非空
  • created_on – 非空
  • last_login – 可以为空

以下语句创建accounts表:

CREATE TABLE accounts (
	user_id serial PRIMARY KEY,
	username VARCHAR ( 50 ) UNIQUE NOT NULL,
	password VARCHAR ( 50 ) NOT NULL,
	email VARCHAR ( 255 ) UNIQUE NOT NULL,
	created_on TIMESTAMP NOT NULL,
    last_login TIMESTAMP 
);

PostgreSQL Create Table - accounts example

以下语句创建一个roles表,包含两列:role_idrole_name

CREATE TABLE roles(
   role_id serial PRIMARY KEY,
   role_name VARCHAR (255) UNIQUE NOT NULL
);

PostgreSQL Create Table - roles example

以下语句创建一个account_roles表,包含三列:user_idrole_idgrant_date

CREATE TABLE account_roles (
  user_id INT NOT NULL,
  role_id INT NOT NULL,
  grant_date TIMESTAMP,
  PRIMARY KEY (user_id, role_id),
  FOREIGN KEY (role_id)
      REFERENCES roles (role_id),
  FOREIGN KEY (user_id)
      REFERENCES accounts (user_id)
);

PostgreSQL Create Table - account_roles example

account_roles表的主键由两列组成:user_id role_id,因此,我们必须将主键约束定义为表约束。

PRIMARY KEY (user_id, role_id)

因为user_id列引用了accounts表中的user_id列,所以我们需要为user_id列定义外键约束

FOREIGN KEY (user_id)
REFERENCES accounts (user_id)

role_id列引用了roles表中的role_id列,我们还需要为role_id列定义外键约束。

FOREIGN KEY (role_id)
REFERENCES roles (role_id)

下面显示了accountsrolesaccount_roles表之间的关系:

PostgreSQL Create Table example

概括

  • 使用CREATE TABLE语句创建一个新表。

  • 使用IF NOT EXISTS选项,仅当新表不存在时才创建新表。

  • 将主键、外键、非空、唯一和检查约束应用于表的列。