Logo
Section 1 / 8

创建表 Products

学习如何在现有数据库中创建新表。

导入

创建表 Products

学习如何在现有数据库中创建新表。

我们将学习的内容

在前几章中,我们开始构建基本的客户关系管理系统。我们已经创建了 customers_db 数据库和 customers 表。在本章中,我们将实现 products 表。

...
ERD 下方的箭头指示要添加的表

products 表具有以下特性:

  • 它将包含一个 主键 id。该字段为整数类型,非空,并自动递增。
  • 它将包含一个 name 字段,类型为字符串,非空且唯一。
  • 它将包含一个 price 字段,类型为十进制数字,非空。

让我们通过执行以下查询来查看当前数据库中已有多少张表:

1show tables;

创建 products 表的命令

现在我们来创建 products 表。我们已经了解了创建表的命令,下面来看一下针对 products 表的具体写法:

1create table products(id int(11) not null auto_increment,name varchar(255) not null, price numeric(15,2) not null, primary key(id));

我们收到了 Succeeded 的响应,表示该命令成功执行。这里唯一的新内容是 numeric (15, 2),这是 price 列的数据类型。它表示该列将存储实数或小数(我们常称其为浮点数)。这些数值将保留两位小数,总位数最多为 15 位。现在,如果我们再次执行 show tables,就能看到新表已出现在当前数据库的表列表中。

1show tables;

我们还可以查看这张新表的结构:

1mysql> show create table products; 2+----------+---------------------+ 3| Table | Create Table | 4+----------+---------------------+ 5| products | CREATE TABLE `products` ( 6 `id` int(11) NOT NULL AUTO_INCREMENT, 7 `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 8 `price` decimal(15,2) NOT NULL, 9 PRIMARY KEY (`id`) 10 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 11+----------+---------------------+ 121 row in set (0.01 sec)

我们可以看到,这张新表确实包含三个字段,且与我们在 create table 命令中指定的定义完全一致。我们可以通过上方代码框中的相同命令来验证结果。

唯一名称

现在我们需要确保没有两个产品具有相同的名称,即名称必须唯一。同时,我们还需要能够快速根据名称搜索产品。为此,我们需要在 name 列上创建一个唯一索引。我们已经知道如何创建唯一索引,现在通过执行下方命令来尝试实现:

1create unique index products_name_uidx on products(name);

让我们验证新唯一索引是否已创建成功:

1mysql> show create table products; 2+----------+---------------------+ 3| Table | Create Table | 4+----------+---------------------+ 5| products | CREATE TABLE `products` ( 6 `id` int(11) NOT NULL AUTO_INCREMENT, 7 `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 8 `price` decimal(15,2) NOT NULL, 9 PRIMARY KEY (`id`), 10 UNIQUE KEY `products_name_uidx` (`name`) 11 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 12+----------+---------------------+ 131 row in set (0.00 sec)

如我们所见,定义中新增了一行:

1UNIQUE KEY `products_name_uidx` (`name`)

这表示在 name 列上已成功创建了一个唯一索引。

添加列和索引

插入产品数据