数据库第一次上机实验报告

实验二 数据库的创建和管理

一、实验目的

熟练掌握使用 Navicat 和 Transact-SQL 语言两种方法创建、修改和删除数据库。学习在 Navicat 中进行数据库的转储和导入。掌握管理数据库的有关系统存储过程。

二、实验内容

1、利用Navicat创建满足以下要求的数据库:

  • 1)数据库存在于连接 MySQL 中;
  • 2)数据库名称为 mydb;
  • 3)字符集选择 utf8 -- UTF-8 Unicode;
  • 4)排序规则选择 utf8_general_ci

具体步骤如下:

新建连接“MySQL”—单击选择并右键—“新建数据库”—输入数据库名“mydb”、字符集“utf8 -- UTF-8 Unicode”、排序规则“utf8_general_ci”—“确定”。如图所示:

右键—“Edit Database”,可以看到如下图所示结果:

2、利用Transact-SQL语言创建满足以下要求的数据库:

  • 1)数据库存在于连接 MySQL 中;
  • 2)数据库名称为 testdb;
  • 3)字符集选择 utf8 -- UTF-8 Unicode;
  • 4)排序规则选择 utf8_general_ci;

具体步骤如下:

点击“新建查询”,在查询编辑器输入以下代码,选中代码后,点击“运行”,完成后,左侧列表中选中连接“MySQL”,点击“刷新”按钮,列表即可见到“testdb”。如图所示:

3、利用 Transact-SQL 语言查看数据库及表的信息。

① 查看连接中的所有数据库

步骤:点击“新建查询”,输入

SHOW DATABASES;

后运行,

② 查看数据库 mysql 中所有的表

步骤:打开查询窗口,输入

show tables from mysql;

后运行,

③ 查看数据库“mysql”中表“help_keyword”的结构。

步骤:打开查询窗口,输入

USE mysql;
DESCRIBE help_keyword;

后运行,

4、利用 Navicat 修改数据库 mydb,修改其排序方式为 utf8_bin。 步骤:右键单击数据库“mydb”—Edit Database,在排序方式中选择“utf8_bin”—“确定”。

5、利用 Transact-SQL 语言修改数据库 mydb 的字符集为 Latin1;

步骤:打开查询窗口,输入以下代码,点击运行

ALTER DATABASE mydb DEFAULT CHARACTER SET = latin1;

关闭数据库“mydb”后重新打开,查看数据库属性,可以看到如下图所示结果:

6、利用 Navicat 删除数据库 mydb。

步骤:直接右键点击 mydb 选择删除即可,注意要关闭当前的 SQL 语句编写界面。

7、利用 Transact-SQL 语言删除数据库 testdb。

步骤:点击“新建查询”,输入

DROP DATABASE testdb;

后运行,

刷新连接“MySQL”,查看结果。

8、转储 MySQL 数据库。

步骤:打开连接“MySQL”—右键单击数据库“mysql”—选择“转储 SQL 文件”—将文件名改为“sql.sql”后保存在桌面。

9、导入MySQL数据库。

① 在连接“MySQL”中新建数据库“sql”(字符集与排序方式尽量一致)。
② 打开数据库“sql”—右键单击—运行 SQL 文件—选择桌面的“sql.sql”文件—点击“确定”。
③ 关闭数据库 sql 后重新打开,对比数据库“sql”与最初的数据库“mysql”,看是否完全相同。

这里实际操作的时候有错误。

三、课后练习题

1、分别用以下几种语句查看数据库“mysql”中任意表的结构或数据(先输入:USE mysql;):

SHOW COLUMNS FROM 表名;DESCRIBE 表名;DESC 表名;SELECT * FROM 表名;  

2、思考以下问题:

1)mysql 中 utf8 编码的 utf8_bin, utf8_general_cs, utf8_general_ci 三者的区别。
2)不同编码方式的数据库之间进行转储和导入会不会出现错误。

答:

1)

  • utf8_bin 将字符串中的每一个字符用二进制数据存储,区分大小写。

  • utf8_genera_ci 不区分大小写,ci 为 case insensitive 的缩写,即大小写不敏感。

  • utf8_general_cs 区分大小写,cs 为 case sensitive 的缩写,即大小写敏感。

2)

会。

实验三 表的创建和管理

一、实验目的

熟练掌握使用 Navicat 和 Transact-SQL 语言两种方法创建、修改和删除表。掌握管理表的有关系统存储过程。

二、实验内容

1、利用 Navicat 创建满足以下要求的数据库:

① 数据库存在于连接 MySQL 中;
② 数据库名称为xsgl;
③ 字符集选择utf8 -- UTF-8 Unicode;排序规则选择 utf8_general_ci。

2、在数据库 xsgl 中,利用 Navicat 创建以下表格:

1)表格名为xs(学生基本情况表);
2)表格中各个属性的定义如下:

具体步骤如下:打开新建的数据库“xsgl”–右键点击“表”--“新建表”。按照上表内容输入个属性的定义,填写“列名”、“数据类型”,并取消或选择“允许NULL值”前的选项,并右键点击“xh”,选择将其设为主键。

3、按照以下步骤向表格 xs 中添加如下记录:

1)打开 Navicat; 2)打开连接 MySQL 找到数据库 xsgl 中的表格 xs; 3)在表格 xs 上右击鼠标,选择“打开表”; 4)在接着出现的记录录入界面上添加记录。(方向键下增加新纪录)

添加完后如图所示:

4、向表xs中增加“入学时间”属性列,其列名为rxsj,数据类型为datetime型。

步骤:右键单击 xs 表—设计表—加入列 rxsj,设置数据类型为 datetime。如图所示:

5、将表 xs 中 nl(年龄)列的数据类型改为 int 型。

步骤:与第 4 项类似。

6、在数据库 xsgl 中,利用 Transact-SQL 语言创建以下表格:

1)表格名为 kc(课程情况表);
2)表格中各个属性的定义如下:

步骤:点击“新建查询”,输入以下代码,点击运行,

USE xsgl;
create table kc
(
    kch char(4) not null,
    kcm char(20) null,
    xss int null,
    xf int null,
    primary key(kch)
)engine=innodb default charset=utf8 auto_increment=1;

7、利用 Transact-SQL 语言修改 kc 表。

① 增加“成绩”一列 cj,int 型,允许为空值,默认为 0。

步骤:点击“新建查询”,输入以下代码,点击运行,

ALTER TABLE kc ADD COLUMN cj INT DEFAULT 0;

② 修改 cj 列的类型为 char。

ALTER TABLE kc MODIFY COLUMN cj char;

③ 修改 cj 列的列名为 mark。

ALTER TABLE kc 
RENAME COLUMN cj TO mark;

④ 删除 mark 列。

ALTER TABLE kc DROP COLUMN mark;

8、利用 Navicat 和 Transact-SQL 语言两种方式删除表 kc。

① 步骤:右键点击表“kc”,选择删除。
② 步骤:点击“新建查询”,输入以下代码,点击执行

DROP TABLE kc;

9、利用 Transact-SQL 将表 xs 重命名为 Students。

RENAME TABLE xs TO Students;

三、课后练习题

1、创建一个名为 cpxs 的数据库,在该数据库中分别通过 Navicat 和查询分析器创建一个名为 cp 的表(产品表),表格中各个属性的定义如下:

答:

Navicat 建表从略。SQL 语句建表如下:

CREATE TABLE `cp` (
  `cpbh` char(6) NOT NULL COMMENT '主码',
  `cpmc` char(30) NOT NULL,
  `jg` float DEFAULT NULL,
  `kcl` int DEFAULT NULL,
  PRIMARY KEY (`cpbh`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

2、思考以下问题:

1)如果要在一个已经存在的表格上删除一列并增加一列,能不能用一个 ALTER TABLE 语句来完成?

答:可以。

实验四 表数据的简单查询

一、实验目的

掌握 SELECT 语句的基本用法。掌握计算列的用法。掌握 WHERE 子句中各类查询条件的写法。

二、实验内容

1、在连接“MySQL”中新建数据库“world”,并将数据库文件 newworld.sql 导入到该数据库之中。

2、查询 world 数据库的 country 表中的国名(Name)、洲名(Continent)和地区(Region)。

步骤:点击“新建查询”,输入以下代码,点击执行,运行结果如图:

USE world;
SELECT NAME, Continent, Region From country;

3、从 world 数据库的 city 表中搜索返回前 20 条的数据。

SELECT * FROM city LIMIT 0, 10;

4、使用 WHERE 子句从 world 数据库的 country 表中检索出所有领土面积超过一百万平方公里的国家名称(Name)、洲名(Continent)以及领土面积(SurfaceArea)。

SELECT Name, Continent, SurfaceArea FROM country
WHERE SurfaceArea > 1000000;

5、查询在 world 数据库的 country 表中 Name 以字母 C 开头的国家的洲名 Continent,地区 Region。

SELECT Continent, Region FROM country
WHERE Name REGEXP '^C';

6、查询 world 数据库 country 表中所有国家的 Name 和 Continent,并按生日 SurfaceArea 从小到大进行排列。

SELECT Name, Continent FROM country
ORDER BY SurfaceArea ASC;

练习巩固

7、查询 country 表中政体(GovernmentForm)属于共和国(Republic)的国家的 Name 和 Population、GovernmentForm。

SELECT Name, Population, GovernmentForm FROM country
WHERE GovernmentForm = 'Republic';

8、country 表中查询前 20 个非洲国家的名称。

SELECT Name FROM country
WHERE Continent = 'Africa'
LIMIT 20;

9、city 表中查询阿富汗(Countrycode 为 AFG)的所有城市的名称和人口,并要求对查询结果按人口的降序排列。

SELECT Name, Population FROM city
WHERE CountryCode = 'AFG'
ORDER BY Population DESC;

10、Country 表中查询领土面积介于一百万和五百万平方公里之间的国家的名称和领土面积(领土面积以除以一万的结果显示)。

SELECT Name, SurfaceArea / 10000 FROM country
WHERE SurfaceArea > 1000000 AND SurfaceArea < 5000000;

11、查询名称以“C”开头的亚洲国家或非洲国家的名称和洲名。

SELECT Name, Continent FROM country
WHERE (Continent = 'Asia' OR Continent = 'Africa') AND Name REGEXP '^C';

12、country 表中查询独立年份为空的国家的名称、国家年份。

SELECT Name, IndepYear FROM country
WHERE IndepYear IS NULL;

三、课后练习题

以下题目在数据库world中完成。

1、查询 country 表中所有亚洲国家的名称、地区,要求查询结果按人口的升序排列。

SELECT Name, Region FROM country
WHERE Continent = 'Asia'
ORDER BY Population ASC;

2、查询 city 表中智利(CHL)或保加利亚(BGR)的城市名称。

SELECT Name FROM city
WHERE CountryCode = 'CHL' OR CountryCode = 'BGR';

3、查询 country 表中 Region 字段包含“Europe”的国家的全部信息。

SELECT * FROM country
WHERE Region like '%Europe%';

4、查询所有君主立宪制(Constitutional Monarchy)国家的名称和人口,按人口降序排列。

SELECT Name, Population FROM country
WHERE GovernmentForm = 'Constitutional Monarchy'
ORDER BY Population DESC;

数据库第一次上机实验报告
http://fanyfull.github.io/2021/11/14/数据库第一次上机实验报告/
作者
Fany Full
发布于
2021年11月14日
许可协议