导入
创建表 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 列上已成功创建了一个唯一索引。