本节书摘来自异步社区《php和mysql web开发从新手到高手(第5版)》一书中的第2章,第2.5节,作者【澳】kevin yank,更多章节内容可以访问云栖社区“异步社区”公众号查看
php和mysql web开发从新手到高手(第5版)
目前为止,我们所遇到的sql命令都相当简单。但是,表是如此具有灵活性。因此,需要一条较为复杂的命令才能创建它。这条命令的基本形式如下:
让我们继续讨论如图2.1所示的joke表。你还记得吧,这个表有3列:id(一个数字)、joketext(笑话的文本)和jokedate(输入笑话的日期)。以下是创建该表的命令:
看上去很费解是吧?让我们分解一下:
**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按钮:
phpmyadmin应该会显示如图2.11所示的输出。

这个列表,是你的数据库(我们将其命名为ijdb)中的所有的表的列表。这个列表只包含了一个表:我们所创建的joke表。因此,到目前为止,一切似乎都很好。让我们使用一条describe查询来进一步查看这个joke表:
如图2.12所示,该表中有3列(或字段)。因而,在这个结果表中有3行。虽然细节有点难以理解,但是如果你仔细看一下,应该能够搞清楚它们的含义。不过,不必担心。有更好的事情要做,诸如向表中添加一些笑话。
在做这件事情之前,我们还有一个任务:删除一个表。这个任务很简单,就像用一条drop database命令删除一个数据库一样简单。只不过在这里,phpmyadmin不会为你提供保护。除非你真的想要删除joke表,否则,不要对它运行这条命令。如果你真的想要删除它,那么,准备好从头开始创建joke表吧。