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;
语句。