• MySQL基础知识复习3(数据库的备份和还原、外键的建立、储存过程练习题)


    知识点

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

    数据库备份和还原请在系统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)不会有改变。

    实验作业

    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字段。

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

     

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

    请将其截图提交:

     

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

     

    1. 多表操作(子查询)

    以下查询使用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关键字)。

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

     

    储存过程练习题

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

    将代码截图提交:

     

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

     

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

    Show procedure status\G

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

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

    举例说明

     

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

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

  • 相关阅读:
    OpenAI ChatGPT 能取代多少程序员的工作?导致失业吗?
    指纹浏览器有什么用?盘点指纹浏览器八大应用场景
    typescript对类型的管理和查找规则
    【漏洞复现】typecho_v1.0-14.10.10_unserialize
    Neo4j 批量导入数据 从官方文档学习LOAD CSV 命令 小白可食用版
    Optional 常用方法总结
    C【数组】
    UART相关参数和Modbus协议
    在数据工厂中刷新PowerBI数据集
    Typescript面向对象(接口、类、多态、重写、抽象类、访问修饰符)
  • 原文地址:https://blog.csdn.net/xiaomoge__/article/details/125433363