MySQL 9.0 参考手册  /  ...  /  创建表

5.3.2 创建表

创建数据库很容易,但此时它是空的,正如 SHOW TABLES 告诉你的那样

mysql> SHOW TABLES;
Empty set (0.00 sec)

更难的部分是决定数据库的结构应该是什么:你需要哪些表,以及每个表中应该包含哪些列。

你想要一个包含每个宠物记录的表。这可以称为 pet 表,它至少应该包含每只动物的名字。因为名字本身并不是很有趣,所以该表应该包含其他信息。例如,如果你的家庭中有不止一个人养宠物,你可能希望列出每只动物的主人。你可能还想记录一些基本的描述性信息,如物种和性别。

年龄呢?这可能很有趣,但它不适合存储在数据库中。年龄会随着时间的推移而变化,这意味着你必须经常更新你的记录。相反,最好存储一个固定值,如出生日期。然后,当你需要年龄时,你可以将其计算为当前日期和出生日期之间的差值。MySQL 提供了用于日期计算的函数,所以这并不难。存储出生日期而不是年龄还有其他优点

  • 你可以将数据库用于生成即将到来的宠物生日提醒等任务。(如果你认为这种类型的查询有点傻,请注意,这与你可能在业务数据库中询问的问题相同,即识别你需要在本周或本月向其发送生日祝福的客户,以实现计算机辅助的个人接触。)

  • 你可以计算相对于当前日期以外的其他日期的年龄。例如,如果你在数据库中存储了死亡日期,你可以很容易地计算出宠物死亡时的年龄。

你可能会想到在 pet 表中可能有用的其他类型的信息,但到目前为止已经确定的信息已经足够了:姓名、主人、物种、性别、出生和死亡。

使用 CREATE TABLE 语句来指定表的布局

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
       species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

VARCHARnameownerspecies 列的不错选择,因为列值的长度是可变的。这些列定义中的长度不必都相同,也不必是 20。你通常可以选择从 165535 的任何长度,只要你觉得合理即可。如果你做出了错误的选择,并且后来发现你需要更长的字段,MySQL 提供了一个 ALTER TABLE 语句。

可以选择几种类型的值来表示动物记录中的性别,例如 'm''f',或者 'male''female'。最简单的方法是使用单个字符 'm''f'

birthdeath 列使用 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 数据类型的更多信息,请参阅 第 13 章,数据类型