SQL怎么创建表?

文章导读
上一个 测验 下一个 在 RDBMS(关系数据库管理系统)中,数据库表用于以结构化的方式存储数据,使用 字段 和 记录。
📋 目录
  1. SQL CREATE TABLE 语句
  2. 验证表创建
  3. SQL CREATE TABLE with PRIMARY KEY
  4. SQL CREATE TABLE IF NOT EXISTS
  5. 使用另一个表 CREATE TABLE
  6. 创建表的重要注意事项
A A

SQL CREATE TABLE 语句

目录
  • SQL CREATE TABLE 语句
  • 验证表创建
  • 带有 PRIMARY KEY 的 SQL CREATE TABLE
  • SQL CREATE TABLE IF NOT EXISTS
  • 使用另一个表创建表
  • 创建表的重要要点


上一个
测验
下一个

在 RDBMS(关系数据库管理系统)中,数据库表用于以结构化的方式存储数据,使用 字段记录

  • 字段 是表中的一列,它定义了将存储什么样的数据(例如姓名、日期或数字)。
  • 记录 是表中的一行,它保存每个字段的实际数据。

简单来说,表由行和列组成,就像电子表格一样。SQL 为我们提供了不同类型的命令来轻松处理这些数据。我们可以使用 SQL 来:

  • 创建或删除表
  • 在这些表中插入、更新或删除数据

SQL CREATE TABLE 语句

SQL 中的 CREATE TABLE 语句用于在现有数据库中创建新表。

创建表时,您必须定义其结构,指定唯一的表名并列出所有列名及其各自的数据类型。这些数据类型可以包括数字、文本、日期等,具体取决于您要存储的数据类型。

语法

以下是在 SQL 中创建表的基本语法:

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

这里:

  • CREATE TABLE: 这是创建新表的 SQL 命令。
  • table_name: 这是您要为表指定的名称。
  • column1, column2, ...: 这些是您希望表中包含的列名。
  • datatype: 指定每列将存储的数据类型,例如 INTVARCHARDATE 等。

示例

让我们创建一个名为 CUSTOMERS 的表,包含以下列:

  • ID: 客户 ID(整数),非空
  • NAME: 客户姓名(文本),非空
  • AGE: 客户年龄(整数),非空
  • ADDRESS: 客户地址(定长文本)
  • SALARY: 客户薪资(十进制数)
CREATE TABLE CUSTOMERS (
   ID       INT NOT NULL,
   NAME     VARCHAR(20) NOT NULL,
   AGE      INT NOT NULL,
   ADDRESS  CHAR(25),
   SALARY   DECIMAL(18, 2)
);

在 MySQL 数据库中执行上述命令后,您将得到以下输出:

Query OK, 0 rows affected (0.13 sec)

验证表创建

您可以使用以下 SQL 命令列出所有表来检查表是否已成功创建:

SHOW TABLES;

如果列出了 CUSTOMERS 表,则表示表已成功创建:

Tables_in_testdb
customers
orders
products

此外,您可以使用 SQL DESC table_name 命令来列出表的描述,如下所示:

DESC CUSTOMERS;

这将显示创建的表的结构:列名、各自的数据类型、约束(如果有)等,如下所示:

Field Type Null Key Default Extra
ID int NO NULL
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18,2) YES NULL

SQL CREATE TABLE with PRIMARY KEY

在 SQL 中,你可以使用约束如 PRIMARY KEY 来确保一列(或多列组合)只包含唯一且非空的值。它用于唯一标识表中的每条记录。

语法

以下是在 SQL 中创建带有 PRIMARY KEY 的表的语法:

方法 1:直接在一列上定义 PRIMARY KEY

CREATE TABLE table_name (
  column1 datatype PRIMARY KEY,
  column2 datatype,
  ...
);

方法 2:为一个或多个列单独定义 PRIMARY KEY

CREATE TABLE table_name (
  column1 datatype,
  column2 datatype,
  column3 datatype,
  ...
  columnN datatype,
  PRIMARY KEY (column_name)
);

你可以使用第二种方法通过在括号内列出多个列来为多列定义主键(称为 composite primary key)。

示例

让我们再次创建 CUSTOMERS 表,这次将 ID 列作为主键:

CREATE TABLE CUSTOMERS (
   ID       INT NOT NULL PRIMARY KEY,
   NAME     VARCHAR(20) NOT NULL,
   AGE      INT NOT NULL,
   ADDRESS  CHAR(25),
   SALARY   DECIMAL(18, 2)
);

执行上述命令后,你将得到以下输出:

Query OK, 0 rows affected (0.07 sec)

SQL CREATE TABLE IF NOT EXISTS

有时,你可能尝试创建数据库中已存在的表。在这种情况下,SQL 将返回如下错误:

ERROR 1050 (42S01): Table 'CUSTOMERS' already exists

为了避免此错误,你可以使用 CREATE TABLE IF NOT EXISTS 命令。只有在表不存在时才会创建表。如果表已存在,该命令将什么也不做并无错误退出。

语法

以下是 CREATE TABLE IF NOT EXISTS 语句的基本语法:

CREATE TABLE IF NOT EXISTS table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   ......
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

示例

以下 SQL 命令仅在数据库中不存在 CUSTOMERS 表时创建它,否则将无错误退出:

CREATE TABLE IF NOT EXISTS CUSTOMERS (
   ID       INT NOT NULL,
   NAME     VARCHAR(20) NOT NULL,
   AGE      INT NOT NULL,
   ADDRESS  CHAR(25),
   SALARY   DECIMAL(18, 2),
   PRIMARY KEY (ID)
);

我们得到的输出如下所示:

Query OK, 0 rows affected, 1 warning (0.02 sec)

使用另一个表 CREATE TABLE

与其从头创建完全新的表,你也可以通过从现有表复制结构和/或数据来创建表。这在你想快速克隆或备份表的一部分时很有帮助。

语法

在 SQL 中从另一个表创建表的基本语法如下:

CREATE TABLE NEW_TABLE_NAME AS
SELECT [column1, column2...columnN]
FROM EXISTING_TABLE_NAME
WHERE Condition;

此命令将:

  • 创建具有与所选字段相同列的新表
  • 将所有匹配的数据行复制到新表中

示例

以下 SQL 命令使用 CUSTOMERS 表的两个列 IDSALARY 创建名为 SALARY 的新表:

CREATE TABLE SALARY AS
SELECT ID, SALARY
FROM CUSTOMERS;

运行此命令后,新 SALARY 表的结构如下:

Field Type Null Key Default Extra
IDint(11)NOPRINULL
SALARYdecimal(18,2)YESNULL

如果你只想复制结构而不复制数据,可以添加一个始终为假的条件,如下所示:

CREATE TABLE SALARY AS
SELECT ID, SALARY
FROM CUSTOMERS
WHERE 1 = 0;

我们得到的输出如下所示:

Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

创建表的重要注意事项

在 SQL 中创建表时,需要记住以下重要注意事项:

  • 表名应具有实际意义,并在同一数据库中唯一。
  • 使用清晰且描述性的列名,如 FIRST_NAME(而不是 1stname)、AGESALARY
  • 为每个列选择正确的数据类型。例如,使用 DECIMAL 表示货币,VARCHAR 表示姓名,INT 表示 ID 或年龄。
  • 始终使用 PRIMARY KEY 来唯一标识记录。