在 PostgreSQL 中,顾名思义,CREATE TABLE 子句用于创建新表。
用法: CREATE TABLE table_name ( column_name TYPE column_constraint, table_constraint table_constraint ) INHERITS existing_table_name;
我们来分析一下上面的语法:
- 首先,在 CREATE TABLE 子句之后定义新表的名称。 TEMPORARY 关键字用于创建临时表。
- 接下来,必须列出列名称、其数据类型和列约束。一个表可以有多列用逗号 (, ) 分隔。列约束定义了列的规则,例如 NOT NULL。
- 然后,在列列表之后,必须定义一个 table-level 约束,该约束为表中的数据定义规则。
- 之后,设置一个现有表,新表继承自该表。这意味着新表包含现有表的所有列和 CREATE TABLE 语句中定义的列。这是 PostgreSQL 对 SQL 的扩展。
现在让我们进入一个例子。
例:
在这个例子中,我们将创建一个名为的新表account
具有以下列和相应的约束:
- user_id - 主键
- 用户名 - 唯一且不为空
- 密码 - 不为空
- 电子邮件 - 唯一且不为空
- created_on - 不为空
- last_login - 空
以下语句创建帐户表:
CREATE TABLE account( user_id serial PRIMARY KEY, username VARCHAR (50) UNIQUE NOT NULL, password VARCHAR (50) NOT NULL, email VARCHAR (355) UNIQUE NOT NULL, created_on TIMESTAMP NOT NULL, last_login TIMESTAMP );
以下语句创建由两列组成的角色表:role_id
和role_name
:
CREATE TABLE role( role_id serial PRIMARY KEY, role_name VARCHAR (255) UNIQUE NOT NULL );
以下语句创建account_roles
包含三列的表:user_id
,role_id
和grant_date
:
CREATE TABLE account_role ( user_id integer NOT NULL, role_id integer NOT NULL, grant_date timestamp without time zone, PRIMARY KEY (user_id, role_id), CONSTRAINT account_role_role_id_fkey FOREIGN KEY (role_id) REFERENCES role (role_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT account_role_user_id_fkey FOREIGN KEY (user_id) REFERENCES account (user_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION );
让我们更详细地检查上面的语句。
的主键account_role
表由两列组成:user_id
和role_id
,因此我们必须使用主键 table-level 约束来定义主键,如下所示:
PRIMARY KEY (user_id, role_id)
因为user_id
列引用user_id
在 account 表中的列,我们需要为该列定义一个外键约束user_id
柱子:
CONSTRAINT account_role_user_id_fkey FOREIGN KEY (user_id) REFERENCES account (user_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION
role_idcolumn 引用role_id
角色表中的列,我们还需要为该列定义一个外键约束role_id
柱子:
CONSTRAINT account_role_role_id_fkey FOREIGN KEY (role_id) REFERENCES role (role_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION,
输出:
相关用法
- PostgreSQL ALTER TABLE用法及代码示例
- PostgreSQL DROP TABLE用法及代码示例
- PostgreSQL CREATE DOMAIN用法及代码示例
- PostgreSQL CREATE SEQUENCE用法及代码示例
注:本文由纯净天空筛选整理自RajuKumar19大神的英文原创作品 PostgreSQL – CREATE TABLE。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。