知识点

一、数据库备份与还原(知识点)

数据库备份和还原请在系统DOS命令行窗口中完成。

如何进入系统DOS命令行窗口:

使用“微软键+R”打开“运行”对话框,之后在“运行”对话框输入cmd,按“确定”键即可进入系统DOS命令行窗口。

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_数据库

 

以下语句执行,无需输入 “;”号结束,直接按回车执行。

1.备份示例:mysqldump -uroot -p123456 two>c:/backup/two_17.sql

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_外键_02

注:Two:备份的数据库;two_17.sql备份的数据库文件。

2.还原示例:mysql -uroot -p123456 test_17<c:/backup/test.sql

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_外键_03

 注:test_17:还原的数据库名称;test.sql:备份的数据库文件。

二、外键(知识点)

外键:在设置外键的时候,删除(delete)和更新(update)有四个参数可以选择:CASCADE、SET NULL、RESTRICT、NO ACTION,它们的区别如下:

参数名称

功能描述

cascade

父表delete、update的时候,子表会delete、update掉关联记录。

set null

父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null。

restrict

如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录(在不定义on delete和on update字句时,这是默认设置,也是最安全的设置)。

No action

等价于restrict

知识点:cascade是同步变化,restrict是对相应的操纵进行限制。

1、on delete cascade和on update cascade是指在删除和更新时会对该更新操作进行同步

2、on delete restrict和on update cascade是指明在删除时外键会对该删除操作进行限制(不能删除),而on update cascade是指明再更新时会对该操作进行同步。

以上的操作都是针对主表(grade)限制的,外键表(student)不影响。

删除或是更新主表(grade),建立外键的表(student)也会同步删除或是更新,

但是删除或是更新外键表(student),主表(grade)不会有改变。

实验作业

  1. 创建名为fuxi_25的数据库。
  2. 将“实验作业25-复习-(3)”文件夹中的“backup”文件夹复制到c盘中,将“backup”文件夹中fuxi_25.sql备份文件还原至数据库fuxi_25中(数据库还原)。
  3. 使用数据库fuxi_25。
  4. 多标操作(外键)

外键知识点:在实际开发中的项目中,一个健壮数据库中的数据一定有很好的参照完整性。例如,有学生档案和成绩单两张表,如果成绩单中有张三的成绩,学生档案中张三的档案却被删除了,这样就会产生垃圾数据或是错误数据。为了保证数据的完整性,将两表之间的数据建立关系,因此就需要在成绩表中添加外键约束。

外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束。外键用于建立和加强两个表数据之间的连接。

(4.1)练习题(建立外键):为student表中gid字段建立名为“fk_id”的外键,连接的主表是grade表中的id字段。

将建立外键的语句截图提交:

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_黑马mysql数据库入门第三章答案_04

 

(4.2)练习题:使用语句“show create table 表名\G”查看创建好的数据表student,通过里面的语句判断是否成功添加外键,

请将其截图提交:

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_数据库_05

 

(4.1)练习题(删除外键):删除student表中名为“fk_id”的外键约束(截图提交)。

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_子查询_06

 

  1. 多表操作(子查询)

以下查询使用department和employee数据表

子查询是指一个查询语句嵌套在另一个查询语句内部的查询。它可以嵌套在一个select、select…into语句、insert…into等语句中。在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件,在子查询中通常可以使用in、exists、any、all操作符。

(5.1)带in关键字的子查询

使用in关键字进行子查询时,内层查询语句仅返回一个数据列,这个数据列中的值将供外层查询语句进行比较操作。.

练习题: 查询存在年龄为22岁的员工的部门(使用in关键字)。

提示:子查询是在employee表中查询出age等于22的did。

将查询语句和结果截图提交:

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_黑马mysql数据库入门第三章答案_07

 

(5.2)带exists关键字的子查询

Exists关键字后面的参数可以是任意一个子查询,这个子查询的作用相当于测试,它不产生任何数据,只返回ture或false,当返回值为ture时,外层查询才会执行。

练习题:查询employee表中是否存在年龄大于21岁的员工(子查询),如果存在,则查询department表中的所有记录(使用exists关键字)。

将查询语句和结果截图提交:

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_黑马mysql数据库入门第三章答案_08

 

储存过程练习题

  1. 练习题(还原):创建名为database_backup的数据库,将实验作业文件夹内backup文件夹中的“four_student.sql”备份文件还原至数据库database_backup。
  2. 练习题(存储过程):使用database_backup数据库,创建一个名为:“proc_sum_count”的存储过程,要求:输入数字n,就可以计算出大于等于n的所有grade总和,并计算大于n的个数。

将代码截图提交:

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_外键_09

 

调用存储过程时n输入90,将结果截图提交:

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_数据库_10

 

  1. 存储过程其他知识点
  2. 查看所有的存储过程语句

Show procedure status\G

3.查看存储过程的状态(如果查看的是当前数据库下的存储过程,无需”数据库名.”作为前缀)

Show create procedure 数据库名.存储过程名;

举例说明

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_子查询_11

黑马mysql数据库入门第三章答案 mysql数据库教程课后题_黑马mysql数据库入门第三章答案_12

 

4.删除存储过程语句(如果删除当前数据库下的存储过程,无需”数据库名.”作为前缀)

Drop procedure 数据库名.存储过程名;