3.3.2 创建表
创建数据库很简单,但此时它是空的,正如 SHOW TABLES 告诉你的:
mysql> SHOW TABLES;
Empty set (0.00 sec)
更难的部分是决定数据库的结构应该是什么:你需要哪些表以及每个表中应该包含哪些列。
你需要一个包含每个宠物记录的表。这可以称为 pet
表,它至少应该包含每种动物的名字。因为名称本身不太有趣,所以表应该包含其他信息。例如,如果你的家庭中有多人饲养宠物,你可能需要列出每只动物的主人。你可能还想记录一些基本的描述性信息,如物种和性别。
年龄呢?这可能很有趣,但存储在数据库中不是一件好事。随着时间的推移,年龄会发生变化,这意味着你必须经常更新记录。相反,最好存储一个固定值,例如出生日期。然后,无论何时你需要年龄,你都可以将其计算为当前日期和出生日期之间的差值。MySQL 提供了进行日期运算的函数,所以这并不困难。存储出生日期而不是年龄还有其他优点:
- 你可以使用该数据库执行任务,例如为即将到来的宠物生日生成提醒。(如果你认为这种类型的查询有点愚蠢,请注意,这是你在商业数据库中可能会问的问题,以确定你需要在本周或本月向其发送生日祝福的客户,以便进行计算机辅助的个人触摸。)
- 你可以根据当前日期以外的日期计算年龄。例如,如果你将死亡日期存储在数据库中,你可以轻松计算宠物死亡时的年龄。
你可能会想到在宠物桌上有用的其他类型的信息,但到目前为止确定的信息已经足够了:name(姓名)、owner(所有者)、species(物种)、sex(性别)、birth(出生)和 death(死亡)。
使用 CREATE TABLE 语句指定表的布局:
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
VARCHAR 是 name
、owner
和 species
列的好选择,因为列值的长度不同。这些列定义中的长度不必全部相同,也不必为 20
。你通常可以选择 1
到 65535
之间的任何长度,只要你觉得最合理。如果你做了一个糟糕的选择,后来发现需要更长的字段,MySQL 会提供 ALTER TABLE 语句。
可以选择几种类型的值来表示动物记录中的性别,例如 'm'
和 'f'
,或者 'male'
和 'female'
。使用单个字符 'm'
和 'f'
是最简单的。
birth
和 death
列使用 DATE 数据类型是一个非常明显的选择。
创建表后,SHOW TABLES 应生成一些输出:
mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
| pet |
+---------------------+
要验证表是否按预期方式创建,请使用 DESCRIBE 语句:
mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
例如,如果忘记了表中列的名称或列的类型,则可以随时使用 DESCRIBE。
有关 MySQL 数据类型的更多信息,参阅第11章,数据类型。