编辑这个页面须要登录或更高权限!

SQL 创建表 CREATE TABLE

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

建立表格

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

SQL CREATE TABLE语句用于创建表。

语法

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

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

);

为了轻松理解此语法,让我们在演示数据库中创建一个表。在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
);

上面的语句创建一个名为person的表,该表具有idnamebirth_datephone四列。注意,每个列名后都有一个数据类型声明;此声明指定列将存储什么类型的数据,整数,字符串,日期等。

某些数据类型可以使用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)以来的秒数。

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

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

  • NOT NULL约束确保该字段不能接受一个NULL值。

  • PRIMARY KEY约束标记对应的字段作为表的主键。

  • AUTO_INCREMENT属性是标准SQL的MySQL扩展,它告诉MySQL如果未指定该值,则通过将前一个值增加1来自动为该字段分配一个值。仅适用于数字字段。

  • UNIQUE约束确保一列的每一行必须具有唯一值。

在下一章中,我们将学习有关SQL约束的更多信息。

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

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

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