SQL 基础教程
SQL 连接
SQL 高级教程
SQL 参考资料

SQL CREATE TABLE 语句

在本教程中,您将学习如何使用 SQL 在数据库中创建表。

创建表

在上一章中,我们学习了如何在数据库服务器上创建数据库。 现在是时候在我们的数据库中创建一些实际保存数据的表了。 数据库表只是将信息组织成行和列。

SQL CREATE TABLE 语句用于创建表。

语法

可以通过以下方式给出创建表的基本语法:

CREATE TABLE table_name (
    column1_name data_type constraints,
    column2_name data_type constraints,
    ....
);

为了容易理解这个语法,让我们在 demo 数据库中创建一个表。 在 MySQL 命令行工具上键入以下语句并按 Enter:

-- MySQL 数据库的语法
CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);
 
-- SQL Server 数据库的语法
CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    name VARCHAR(50) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

上面的语句创建了一个名为 persons 的表,其中包含四列 id, name, birth_datephone。 请注意,每个列名后面都有一个数据类型声明; 此声明指定列将存储什么类型的数据,是整数、字符串、日期等。

一些 data types 可以用一个长度参数声明,该参数指示该列中可以存储多少个字符。 例如,VARCHAR(50) 最多可容纳 50 个字符。

注意: 列的数据类型可能因数据库系统而异。 例如,MySQL 和 SQL Server 支持整数值的 INT 数据类型,而 Oracle 数据库支持 NUMBER 数据类型。

下表总结了 MySQL 支持的最常用的数据类型。

数据类型
说明
INT 存储 -2147483648 到 2147483647 范围内的数值
DECIMAL 以精确的精度存储十进制值。
CHAR 存储固定长度的字符串,最大长度为 255 个字符。
VARCHAR 存储最大长度为 65,535 个字符的可变长度字符串。
TEXT 存储最大大小为 65,535 个字符的字符串。
DATE 以 YYYY-MM-DD 格式存储日期值。
DATETIME 以 YYYY-MM-DD HH:MM:SS 格式存储组合的日期/时间值。
TIMESTAMP 存储时间戳值。 TIMESTAMP 值存储为自 Unix 纪元 ('1970-01-01 00:00:01' UTC) 以来的秒数。

请查看参考部分 SQL DB 数据类型,了解有关流行 RDBMS(如 MySQL、SQL Server 等)中可用的所有数据类型的详细信息。

在前面的语句中为表列设置了一些额外的约束(也称为 修饰符)。 约束定义有关列中允许的值的规则。

  • NOT NULL 约束确保该字段不能接受 NULL 值。
  • PRIMARY KEY 约束将相应字段标记为表的主键。
  • AUTO_INCREMENT 属性是 MySQL 对标准 SQL 的扩展,它告诉 MySQL 如果未指定此字段,则通过将前一个值增加 1 自动为其分配一个值。仅适用于数字 字段。
  • UNIQUE 约束确保列的每一行都必须具有唯一值。

我们将在下一章了解更多关于SQL 约束

注意: Microsoft SQL Server 使用 IDENTITY 属性来执行自动增量功能。 默认值为IDENTITY(1,1),表示种子或起始值为1,增量值也为1。

提示: 在 MySQL 和 Oracle 数据库中,您可以执行命令 DESC table_name; 来查看任何表的列信息或结构,而在 SQL Server 中执行命令 EXEC sp_columns table_name;(将 table_name 替换为实际表名)。


Create Table If Not Exists

如果您尝试创建一个已经存在于数据库中的表,您将收到一条错误消息。 为了避免在 MySQL 中出现这种情况,您可以使用可选子句 IF NOT EXISTS,如下所示:

CREATE TABLE IF NOT EXISTS persons (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

提示:如果要查看当前选中数据库中的表列表,可以在 MySQL 命令行中执行 SHOW TABLES; 语句。

Advertisements