2.5 创建表
PHP和MySQL Web开发从新手到高手(第5版)
目前为止,我们所遇到的SQL命令都相当简单。但是,表是如此具有灵活性。因此,需要一条较为复杂的命令才能创建它。这条命令的基本形式如下:
CREATE TABLE table_name (
column1Name column1Type column1Details,
column2Name column2Type column2Details,
⋮
) DEFAULT CHARACTER SET charset ENGINE=InnoDB
让我们继续讨论如图2.1所示的joke表。你还记得吧,这个表有3列:id(一个数字)、joketext(笑话的文本)和jokedate(输入笑话的日期)。以下是创建该表的命令:
CREATE TABLE joke (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
joketext TEXT,
jokedate DATE NOT NULL
) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB
看上去很费解是吧?让我们分解一下:
**CREATE TABLE joke (
**
第一行相当简单,它表示想要创建一个名为joke的新表。开始的括号“”,表示其后是一个列表,将会列出表中的各个列。
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
第二行表示我们想要一个名为id的列,其中包含了一个整数(INT)。也就是说,这是一个完整的数字。该行剩下的部分则表示这个列的细节:
1.首先,在这个表中创建一个行的时候,这个列不能为空(NOT NULL)。
2.接下来,在向该表添加一个新的条目的时候,如果不想为该列指定一个值,我们希望MySQL自动去选择一个值,这个值即是在表中当前最高值的基础上加1(AUTO_INCREMENT)。
3.最后,这个列充当表中的条目的一个唯一标识符。因此,该列中的所有的值都必须是唯一的(PRIMARY KEY)。
**joketext TEXT,
**
第三行非常简单,它表示我们想要一个名为joketext的列,其中包含了文本(TEXT)。
**jokedate DATE NOT NULL
**
第四行确定了最后一列,名为jokedate,它将包含一个不能为空(NOT NULL)的日期(DATE)。
) DEFAULT CHARACTER SET utf8
结束圆括号“”表示表中的列的列表到此结束。DEFAULT CHARACTER SET utf8告诉MySQL,我们将在表中存储UTF-8编码的文本。UTF-8是Web内容最常用的编码。因此,对于要在Web上使用的所有数据库表,都应该使用UTF-8编码。
**ENGINE=InnoDB
**
如上所示,这告诉MySQL,使用哪个存储引擎(storage engine)来创建这个表。
请把存储引擎当作是文件格式。当你构建一个Web站点的时候,通常选择对站点上的照片使用JPEG格式。但是,对于构成站点设计的图像,请坚持使用PNG格式。这两种格式浏览器都能够支持,不过,每种格式都有自己的优点和缺点。同样,MySQL也支持多种格式的数据库表。
目前为止,对类似于我在本书中构建的Web站点数据库来说,InnoDB格式是最佳选择。然而,较早的MyISAM格式是默认的格式。因此,我们必须告知MySQL,期望它创建一个InnoDB表。
注意,我们为所创建的每一列都指定了一个特定的数据类型。id将包含整数,joketext将包含文本,jokedate将包含日期。MySQL要求提前为每一列指定数据类型。稍后你将会看到,这有助于组织好数据,还允许我们用强有力的方式来比较列中的值。要了解MySQL数据类型的列表,请参见附录D。
现在,如果你正确地输入了如上所示的命令并单击Go按钮,phpMyAdmin主窗口将确认查询正确地执行了,并将创建你的第一个表。如果你犯了录入错误,phpMyAdmin将告诉你所输入的查询有一个问题,并且将尝试指出它在理解你的意图的时候在哪里遇到了问题。
让我们查看新的表,并确认已正确地创建了它。在SQL查询窗口中输入如下的命令,并且单击Go按钮:
SHOW TABLES
phpMyAdmin应该会显示如图2.11所示的输出。
这个列表,是你的数据库(我们将其命名为ijdb)中的所有的表的列表。这个列表只包含了一个表:我们所创建的joke表。因此,到目前为止,一切似乎都很好。让我们使用一条DESCRIBE查询来进一步查看这个joke表:
DESCRIBE joke
如图2.12所示,该表中有3列(或字段)。因而,在这个结果表中有3行。虽然细节有点难以理解,但是如果你仔细看一下,应该能够搞清楚它们的含义。不过,不必担心。有更好的事情要做,诸如向表中添加一些笑话。
在做这件事情之前,我们还有一个任务:删除一个表。这个任务很简单,就像用一条DROP DATABASE命令删除一个数据库一样简单。只不过在这里,phpMyAdmin不会为你提供保护。除非你真的想要删除joke表,否则,不要对它运行这条命令。如果你真的想要删除它,那么,准备好从头开始创建joke表吧。
DROP TABLE tableName