九月 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 – 主键列唯一标识表中的行。一张表只能有一个主键。主键约束允许您定义表的主键。
- CHECK –
CHECK
约束确保数据必须满足布尔表达式。 - 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
);
以下语句创建一个roles
表,包含两列:role_id
和role_name
。
CREATE TABLE roles(
role_id serial PRIMARY KEY,
role_name VARCHAR (255) UNIQUE NOT NULL
);
以下语句创建一个account_roles
表,包含三列:user_id
、role_id
和grant_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)
);
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)
下面显示了accounts
、roles
和account_roles
表之间的关系:
概括
- 使用
CREATE TABLE
语句创建一个新表。 - 使用
IF NOT EXISTS
选项,仅当新表不存在时才创建新表。 - 将主键、外键、非空、唯一和检查约束应用于表的列。