PostgreSQL - 创建表:初学者指南
你好啊,未来的数据库大师们!今天,我们将踏上一段激动人心的旅程,探索PostgreSQL的世界,特别是如何创建表。别担心如果你之前从未编写过一行代码——我会成为你的友好向导,我们会一步步来。在本教程结束时,你将能够像专业人士一样创建表!
PostgreSQL中的表是什么?
在我们深入探讨创建表的细节之前,让我们先了解一下表是什么。想象一下电子表格——你知道的,那些有行和列的网格?数据库表非常类似。它是一组相关的数据,组织成行(也称为记录)和列(也称为字段)。
例如,如果你经营一家小图书馆,你可能会有一个名为"Books"的表,列包括"标题"、"作者"、"ISBN"和"出版日期"。这个表中的每一行都将代表你图书馆中的一本书。
创建表的语法
现在,让我们看看在PostgreSQL中创建表的基本语法:
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
column3 datatype constraints,
....
);
别被这个吓到了!它看起来比实际上要复杂。让我们分解一下:
-
CREATE TABLE
:这个命令告诉PostgreSQL你想要创建一个新表。 -
table_name
:这里是你想要给你的表指定的名字。 - 在括号内,你列出你想要在表中列出的所有列。
- 对于每一列,你指定:
- 列名
- 数据类型(比如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