在 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。