在本教程中,您将学习如何使用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的表,该表具有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)以来的秒数。 |
请查看参考部分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命令行上执行语句。