CodeGym /课程 /SQL SELF /创建表的基础: CREATE TABLE

创建表的基础: CREATE TABLE

SQL SELF
第 17 级 , 课程 0
可用

在最开始的几节课里,我们已经打下了关系型数据库和 PostgreSQL 的基础,学会了怎么用 psqlpgAdmin,也知道了怎么创建和管理数据库。现在,是时候来搞定关系型数据库的主要“积木”——了。所有数据都存在表里,之后我们可以对它们做筛选、排序或者 join。

在 PostgreSQL 里创建表用的就是 CREATE TABLE 命令。这个命令描述了表的结构:表名、列名和它们的数据类型。

命令的基本结构

基本语法长这样:

CREATE TABLE 表名 (
    列1 数据类型 constraints,
    列2 数据类型 constraints,
    ...
);

拆开讲讲:

  • 表名 – 表的名字(比如 students)。
  • 列1 – 列的名字(比如 idname)。
  • 数据类型 – 列的数据类型(比如 INTEGERVARCHAR)。
  • constraints – 数据的约束(比如 NOT NULLPRIMARY KEY)。

现在我们来创建第一个表。

创建表的例子

场景:在学习用的数据库里要存学生的信息。我们来建一个 students 表,字段有:

  • id:学生的唯一标识(自增);
  • name:学生的名字(字符串,最多 100 个字符);
  • age:学生的年龄(正整数)。
CREATE TABLE students (
    id SERIAL PRIMARY KEY,  -- 学生唯一ID
    name VARCHAR(100),      -- 名字
    age INTEGER             -- 年龄
);

这里发生了什么:

  1. id SERIAL PRIMARY KEY:创建了 id 这一列,会自动生成唯一数字(1, 2, 3...),而且它是表的主键。
  2. name VARCHAR(100):创建了文本列,VARCHAR(100) 表示字符串最多 100 个字符。
  3. age INTEGER:创建了数字列,用来存年龄。

现在,如果你在 psqlpgAdmin 里执行这个语句,students 表就会被创建出来。

列的数据类型

建表的时候,选对每一列的数据类型很重要。PostgreSQL 提供了很多类型,先从最常用的说起。

数据类型 说明 值的例子
INTEGER 整数。适合存年龄、数量、ID 之类的。 1, 42, 100
VARCHAR(n) 长度最多 n 的字符串。适合长度有限的文本。 'Alice', 'Bob'
TEXT 不限长度的字符串。用来存很长的文本(比如产品描述)。 'Very long text...'
DATE 只有日期没有时间。用来记录生日、事件日期。 2023-10-12
BOOLEAN 布尔类型:TRUEFALSE。适合做标记(比如完成/未完成)。 TRUE, FALSE

怎么选合适的数据类型

  • 存数字就用 INTEGER
  • 已知长度限制的字符串——用 VARCHAR(n)
  • 没限制的文本——用 TEXT
  • 日期和时间用 DATETIMESTAMP

例子:创建 courses

假设我们还要在数据库里存课程的信息。每个课程有:

  • id:唯一标识;
  • name:课程名(字符串,最多 100 个字符);
  • description:课程描述(长文本);
  • start_date:课程开始日期。

SQL 代码:

CREATE TABLE courses (
    id SERIAL PRIMARY KEY,      -- 课程唯一ID
    name VARCHAR(100),          -- 课程名
    description TEXT,           -- 描述
    start_date DATE             -- 开始日期
);

动手练习

现在轮到你来建表啦!任务如下:

  1. 创建一个 teachers 表,字段有:
    • id:唯一标识。
    • name:老师名字(字符串,最多 50 个字符)。
    • subject:他/她教的科目(字符串,最多 50 个字符)。
    • hire_date:入职日期。

可以用下面的代码:

CREATE TABLE teachers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    subject VARCHAR(50),
    hire_date DATE
);

建完表后,在 psql 里用 \d teachers 命令,确认表已经建好。

建表时常见的坑

刚开始玩表的时候,容易踩坑。下面是常见的几种情况:

表名或列名写错。 在 PostgreSQL 里名字大小写不敏感,但如果你用 " 把名字括起来,就要小心了。比如 CREATE TABLE "MyTable" 会建一个叫 "MyTable" 的表,而 mytable 就不是它的名字了。

数据类型写错。 如果写了不存在的数据类型,SQL 会报错。

CREATE TABLE example (
    column1 STRANGE_TYPE
);

这个语句不会成功,因为 STRANGE_TYPE 根本不存在。

忘了 PRIMARY KEY 如果没加主键,表还是能建出来,但以后要唯一标识行就麻烦了。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION