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_date 和 phone。 请注意,每个列名后面都有一个数据类型声明; 此声明指定列将存储什么类型的数据,是整数、字符串、日期等。
一些 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;
语句。