修改 Countrylanguage 表的主键

MySQLBeginner
立即练习

介绍

在这个项目中,你将学习如何修改 MySQL 数据库中 countrylanguage 表的主键。初始主键仅基于 CountryCode 列,但为了更好地组织数据,你将使用 CountryCodeLanguage 列创建一个复合主键。

👀 预览

MariaDB [world]> DESC countrylanguage;
+-------------+---------------+------+-----+---------+-------+
| 字段         | 类型          | 空值 | 键  | 默认值    | 额外  |
+-------------+---------------+------+-----+---------+-------+
| CountryCode | char(3)       | 否   | 主键|         |       |
| Language    | char(30)      | 否   | 主键|         |       |
| IsOfficial  | enum('T','F') | 否   |     | F       |       |
| Percentage  | decimal(4,1)  | 否   |     | 0.0     |       |
+-------------+---------------+------+-----+---------+-------+
4 rows in set (0.001 sec)

🎯 任务

在这个项目中,你将学习:

  • 如何使用 sudo 命令无密码访问 MySQL
  • 如何将 SQL 文件中的数据导入到 MySQL 数据库
  • 如何将表的主键修改为复合键

🏆 成果

完成这个项目后,你将能够:

  • 理解使用复合主键对更好地组织数据的重要性
  • 自信地对 MySQL 表的主键结构进行更改
  • 应用你的 SQL 语句知识来实现所需的数据库修改

访问 MySQL 并导入数据

在这一步中,你将学习如何使用 sudo 命令无密码访问 MySQL,并将 /home/labex/project/world.sql 中的数据导入到 MySQL 中。

  1. 打开一个终端并运行以下命令来启动 MySQL 服务:
sudo service mysql start
  1. 使用 sudo 命令无密码访问 MySQL:
sudo mysql
  1. /home/labex/project/world.sql 中的数据导入到 MySQL 并切换到 world 数据库:
MariaDB [(none)]> SOURCE /home/labex/project/world.sql;
✨ 查看解决方案并练习

修改主键

在这一步中,你将学习如何将 countrylanguage 表的主键修改为由 CountryCodeLanguage 组成的复合键。

  1. 打开 changePri.sql 文件。
  2. 将以下 SQL 语句添加到 changePri.sql 文件中:
-- 删除原始主键约束
ALTER TABLE countrylanguage DROP PRIMARY KEY;

-- 添加复合主键约束
ALTER TABLE countrylanguage ADD PRIMARY KEY (CountryCode, Language);
  1. 保存 changePri.sql 文件。
  2. 在 MySQL 中运行 changePri.sql 脚本:
MariaDB [world]> SOURCE /home/labex/project/changePri.sql;
  1. 验证 countrylanguage 表的更改:
MariaDB [world]> DESC countrylanguage;

输出现在应显示由 CountryCodeLanguage 组成的复合主键。

+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| CountryCode | char(3)       | NO   | PRI |         |       |
| Language    | char(30)      | NO   | PRI |         |       |
| IsOfficial  | enum('T','F') | NO   |     | F       |       |
| Percentage  | decimal(4,1)  | NO   |     | 0.0     |       |
+-------------+---------------+------+-----+---------+-------+
4 rows in set (0.001 sec)
✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。