Skip to content

SQL Create Table

CREATE TABLE 语句是 SQL 中用于在数据库中定义新表结构的基础。表是组织数据的主要方式,由行(记录)和列(字段)组成。每个表在其模式(schema)内必须有一个唯一的名称。

可以将 CREATE TABLE 看作是在输入任何数据之前绘制电子表格的蓝图。你决定每列叫什么以及它将包含哪种信息。

CREATE TABLE table_name ( column_name1 data_type [constraints], column_name2 data_type [constraints], column_name3 data_type [constraints], … [table_constraints] );

让我们分解一下语法:

  • table_name:你为表选择的名称(例如,Employees,Products)。
  • column_name1,column_name2,…:表中每列的名称(例如,EmployeeID,ProductName,HireDate)。
  • data_type:指定每列可以存储的数据种类。常见的数据类型包括:
  • INT 或 INTEGER:用于整数(例如,1, 100, -50)。
  • VARCHAR(n):用于最大长度为 n 的变长字符串(例如,‘John Doe’, ‘Product Description’)。在某些系统如 SQL Server 中,使用 NVARCHAR(n) 支持 Unicode 字符。
  • CHAR(n):用于固定长度的字符串。如果字符串短于 n,通常会用空格填充。
  • TEXT 或 CLOB:用于非常长的文本字符串(例如,文章,长评论)。
  • DECIMAL(p, s) 或 NUMERIC(p, s):用于具有固定精度(总共 p 位数字)和标度(小数点后 s 位数字)的数字(例如,123.45)。
  • FLOAT 或 REAL:用于近似数值数据(浮点数)。
  • DATE:用于日期(例如,‘2024-07-15’)。
  • TIMESTAMP 或 DATETIME:用于日期和时间值(例如,‘2024-07-15 10:30:00’)。
  • BOOLEAN(在某些系统中是 BIT):用于布尔值(真/假)。
  • BLOB 或 BYTEA:用于二进制数据,如图像或文件。
  • constraints(可选):应用于列或表中的数据的规则。常见的列约束包括:
  • NOT NULL:确保列不能有 NULL(空)值。
  • UNIQUE:确保列中的所有值都是唯一的。
  • PRIMARY KEY(主键):NOT NULL 和 UNIQUE 的组合。唯一标识表中的每一行。一个表只能有一个主键。
  • FOREIGN KEY(外键):将一个表中的列(或多列)链接到另一个表中的主键,强制执行参照完整性。
  • CHECK:确保列中的所有值满足特定条件。
  • DEFAULT:如果在插入时没有指定值,则为列设置一个默认值。

提示:不同数据库系统(如 PostgreSQL、MySQL、SQL Server、Oracle)之间,具体的数据类型及其名称可能略有差异。请始终查阅你的特定 RDBMS 文档以获取精确细节。如需一般概览,你可以搜索“SQL Data Types Comparison”。

让我们创建一个名为 Employees 的表,用于存储公司员工的信息。它将包含 ID、名字、姓氏、电子邮件、入职日期和部门 ID 等列。

CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY, -- Uniquely identifies each employee
FirstName VARCHAR(100) NOT NULL, -- First name cannot be empty
LastName VARCHAR(100) NOT NULL, -- Last name cannot be empty
Email VARCHAR(255) UNIQUE, -- Email must be unique for each employee
HireDate DATE, -- Date the employee was hired
DepartmentID INT, -- ID of the department they belong to
Salary DECIMAL(10, 2) CHECK (Salary >= 0) -- Salary must be non-negative
);

在此示例中:

  • EmployeeID 是一个整数,并且是此表的 PRIMARY KEY(主键)。这意味着每个 EmployeeID 必须是唯一的且不能为空(not null),作为员工的主要标识符。
  • FirstName 和 LastName 是长度可变、最多 100 个字符的字符串,且为 NOT NULL,这意味着每个员工都必须提供这两个值。
  • Email 是一个长度可变、最多 255 个字符的字符串,且必须是 UNIQUE(唯一的)。
  • HireDate 存储入职日期。
  • DepartmentID 是一个整数。我们以后可能会将其设为 FOREIGN KEY(外键),引用一个 Departments 表。
  • Salary 是一个十进制数,可以存储像 50000.00 这样的值,并且 CHECK 约束确保它不能为负数。

执行此语句后,会创建一个空的 Employees 表结构。它已准备好使用 INSERT INTO 语句填充数据。

空的 “Employees” 表结构概念上看起来像这样(暂无数据):

EmployeeID | FirstName | LastName | Email | HireDate | DepartmentID | Salary

最佳实践:选择合适的数据类型和定义 PRIMARY KEY(主键)对于数据完整性和性能至关重要。此外,考虑哪些列不应允许 NULL 值。

实际应用:在一个项目的开始阶段,你会使用 CREATE TABLE 来定义数据库模式(schema),例如,根据你的应用程序需求创建 Users、Products、Orders、Comments 等表。