本节课程您将学习:
表是关系数据库中存储结构化数据的基本结构, 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 只会给出警告而不是错误并跳过创建新表。data_type
是列将要存储的数据类型,例如字符串、整数、日期等。指定可选的 [comlumn_constraint]
,例如 NOT NULL、Check, Unique,、主键、外键等。下面使用 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 创建一个新表。
\d
或 \dt
命令列出当前数据库中的所有表。
\d table-name
命令查看指定表的结构,它将列出表的所有列及其数据类型和约束。
使用 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;
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)
);