SQL CREATE TABLE 语句

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

创建表

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

SQL CREATE TABLE 语句用于创建表。

语法

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

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

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

-- Syntax for MySQL Database 
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
);
 
-- Syntax for SQL Server Database 
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_date 和 *phone*。请注意,每个列名后跟一个数据类型声明; 此声明指定列将存储的数据类型,比如是整数,字符串,日期等。

某些数据类型可以使用 length 参数声明,该参数指示可以在列中存储的字符数。例如, 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)以来的秒数。

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

  • NOT NULL 约束确保该字段不能接受一个 NULL 值。
  • PRIMARY KEY 约束标志着相应的字段作为表的主键。
  • AUTO_INCREMENT 属性是标准 SQL 的 MySQL 扩展,它通过将前一个值递增 1 来告诉 MySQL 自动为该字段分配值(如果未指定)。仅适用于数字字段。
  • UNIQUE 约束确保每一行的列必须有一个独特的值。

我们将在下一章中了解有关 SQL 约束的更多信息。

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

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

如果不存在则创建表

如果你尝试创建一个已存在于数据库中的表,你将收到一条错误消息,为避免在 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; 语句。