PostgreSQL - 创建表:初学者指南

你好啊,未来的数据库大师们!今天,我们将踏上一段激动人心的旅程,探索PostgreSQL的世界,特别是如何创建表。别担心如果你之前从未编写过一行代码——我会成为你的友好向导,我们会一步步来。在本教程结束时,你将能够像专业人士一样创建表!

PostgreSQL - Create Table

PostgreSQL中的表是什么?

在我们深入探讨创建表的细节之前,让我们先了解一下表是什么。想象一下电子表格——你知道的,那些有行和列的网格?数据库表非常类似。它是一组相关的数据,组织成行(也称为记录)和列(也称为字段)。

例如,如果你经营一家小图书馆,你可能会有一个名为"Books"的表,列包括"标题"、"作者"、"ISBN"和"出版日期"。这个表中的每一行都将代表你图书馆中的一本书。

创建表的语法

现在,让我们看看在PostgreSQL中创建表的基本语法:

CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
column3 datatype constraints,
....
);

别被这个吓到了!它看起来比实际上要复杂。让我们分解一下:

  1. CREATE TABLE:这个命令告诉PostgreSQL你想要创建一个新表。
  2. table_name:这里是你想要给你的表指定的名字。
  3. 在括号内,你列出你想要在表中列出的所有列。
  4. 对于每一列,你指定:
  • 列名
  • 数据类型(比如INTEGER表示整数,TEXT表示字符串等)
  • 任何约束(比如NOT NULL如果列必须始终有值)

示例:让我们创建一些表!

示例1:一个简单的Books表

让我们从一个简单的示例开始。我们将为我们的想象图书馆创建一个表:

CREATE TABLE books (
book_id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(50) NOT NULL,
publication_date DATE,
isbn VARCHAR(13) UNIQUE
);

让我们分解一下:

  • book_id:这是每本书的唯一标识符。SERIAL意味着它将自动为每本新书增加。
  • title:这可以长达100个字符,且不能为空(NOT NULL)。
  • author:最多50个字符,也不能为空。
  • publication_date:这是可选的(我们没有指定NOT NULL)。
  • isbn:这是每本书的唯一标识。

示例2:一个更复杂的Customers表

现在,让我们创建一个稍微复杂一点的客户表:

CREATE TABLE customers (
customer_id SERIAL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
phone VARCHAR(20),
registration_date DATE DEFAULT CURRENT_DATE,
loyalty_points INTEGER DEFAULT 0 CHECK (loyalty_points >= 0)
);

这个表引入了一些新概念:

  • DEFAULT:我们为registration_date使用这个,以自动将新客户添加时的日期设置为今天的日期。
  • CHECK:这确保loyalty_points永远不能为负。

PostgreSQL中的数据类型

PostgreSQL提供了各种各样的数据类型。以下是一些常见的:

数据类型 描述 示例
INTEGER 整数 42
SERIAL 自动增长的整数 自动分配
VARCHAR(n) 最大长度为n的变长字符串 'Hello, World!'
TEXT 任意长度的变长字符串 '一个非常长的文本...'
DATE 日期(没有时间) '2023-06-15'
TIMESTAMP 日期和时间 '2023-06-15 14:30:00'
BOOLEAN 真假值 TRUE 或 FALSE
NUMERIC(p,s) 精确数字,p位数字(小数点后s位) 123.45

PostgreSQL中的约束

约束是我们对列设置的规则。以下是一些常见的:

约束 描述
NOT NULL 列不能包含空值
UNIQUE 列中的所有值都必须不同
PRIMARY KEY 在表中唯一标识每行
FOREIGN KEY 确保两个表之间的引用完整性
CHECK 确保列中的所有值满足特定条件
DEFAULT 为列设置默认值

再来几个示例

示例3:一个带有外键的表

让我们创建一个引用我们'customers'表的'orders'表:

CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
customer_id INTEGER REFERENCES customers(customer_id),
order_date DATE DEFAULT CURRENT_DATE,
total_amount NUMERIC(10,2) CHECK (total_amount > 0)
);

这个表有一个外键(customer_id),它引用customers表,确保每个订单都与一个有效的客户关联。

示例4:一个带有组合主键的表

有时,你可能想要一个由多列组成的主键:

CREATE TABLE book_authors (
book_id INTEGER REFERENCES books(book_id),
author_id INTEGER REFERENCES authors(author_id),
PRIMARY KEY (book_id, author_id)
);

这个表可能用于处理有多位作者的书,或者作者编写了多本书的情况。

结论

恭喜你!你已经迈出了进入PostgreSQL表创建世界的第一步。记住,熟能生巧。尝试为不同的场景创建表——也许是一个音乐库,一本食谱书,或者甚至是你最喜欢的视频游戏的数据库。

不要害怕实验和犯错误——这是我们学习的方式!而且始终记住:在数据库的世界里,你拥有CREATE、ALTER甚至DROP整个数据世界的力量。使用这种力量要谨慎,年轻的帕德沃恩!

快乐编码,愿PostgreSQL与你同在!

Credits: Image by storyset