知识点
一、数据库备份与还原(知识点)
数据库备份和还原请在系统DOS命令行窗口中完成。
如何进入系统DOS命令行窗口:
使用“微软键+R”打开“运行”对话框,之后在“运行”对话框输入cmd,按“确定”键即可进入系统DOS命令行窗口。
以下语句执行,无需输入 “;”号结束,直接按回车执行。
1.备份示例:mysqldump -uroot -p123456 two>c:/backup/two_17.sql
注:Two:备份的数据库;two_17.sql备份的数据库文件。
2.还原示例:mysql -uroot -p123456 test_17<c:/backup/test.sql
注: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)不会有改变。
实验作业
- 创建名为fuxi_25的数据库。
- 将“实验作业25-复习-(3)”文件夹中的“backup”文件夹复制到c盘中,将“backup”文件夹中fuxi_25.sql备份文件还原至数据库fuxi_25中(数据库还原)。
- 使用数据库fuxi_25。
- 多标操作(外键)
外键知识点:在实际开发中的项目中,一个健壮数据库中的数据一定有很好的参照完整性。例如,有学生档案和成绩单两张表,如果成绩单中有张三的成绩,学生档案中张三的档案却被删除了,这样就会产生垃圾数据或是错误数据。为了保证数据的完整性,将两表之间的数据建立关系,因此就需要在成绩表中添加外键约束。
外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束。外键用于建立和加强两个表数据之间的连接。
(4.1)练习题(建立外键):为student表中gid字段建立名为“fk_id”的外键,连接的主表是grade表中的id字段。
将建立外键的语句截图提交:
(4.2)练习题:使用语句“show create table 表名\G”查看创建好的数据表student,通过里面的语句判断是否成功添加外键,
请将其截图提交:
(4.1)练习题(删除外键):删除student表中名为“fk_id”的外键约束(截图提交)。
- 多表操作(子查询)
以下查询使用department和employee数据表
子查询是指一个查询语句嵌套在另一个查询语句内部的查询。它可以嵌套在一个select、select…into语句、insert…into等语句中。在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件,在子查询中通常可以使用in、exists、any、all操作符。
(5.1)带in关键字的子查询
使用in关键字进行子查询时,内层查询语句仅返回一个数据列,这个数据列中的值将供外层查询语句进行比较操作。.
练习题: 查询存在年龄为22岁的员工的部门(使用in关键字)。
提示:子查询是在employee表中查询出age等于22的did。
将查询语句和结果截图提交:
(5.2)带exists关键字的子查询
Exists关键字后面的参数可以是任意一个子查询,这个子查询的作用相当于测试,它不产生任何数据,只返回ture或false,当返回值为ture时,外层查询才会执行。
练习题:查询employee表中是否存在年龄大于21岁的员工(子查询),如果存在,则查询department表中的所有记录(使用exists关键字)。
将查询语句和结果截图提交:
储存过程练习题
- 练习题(还原):创建名为database_backup的数据库,将实验作业文件夹内backup文件夹中的“four_student.sql”备份文件还原至数据库database_backup。
- 练习题(存储过程):使用database_backup数据库,创建一个名为:“proc_sum_count”的存储过程,要求:输入数字n,就可以计算出大于等于n的所有grade总和,并计算大于n的个数。
将代码截图提交:
调用存储过程时n输入90,将结果截图提交:
- 存储过程其他知识点
- 查看所有的存储过程语句
Show procedure status\G
3.查看存储过程的状态(如果查看的是当前数据库下的存储过程,无需”数据库名.”作为前缀)
Show create procedure 数据库名.存储过程名;
举例说明
4.删除存储过程语句(如果删除当前数据库下的存储过程,无需”数据库名.”作为前缀)
Drop procedure 数据库名.存储过程名;