版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
·PAGE80··PAGE81·习题11.什么是数据?什么是信息?什么是数据处理?数据是指存储在某一种媒体上的能够识别的物理符号,用来记录事物的情况,用类型和值来表征。不同的数据类型,记录的事物性质不同。信息是经过加工处理的有用的数据。数据只有经过提炼和抽象变成有用的数据才能成为信息。信息仍以数据的形式表现。数据处理是指将数据加工转换成信息的过程。数据处理也叫信息处理。通过处理数据可以获得信息,通过分析和筛选信息可以产生决策。2.什么是数据库管理系统?什么是数据库?什么是数据库应用系统?什么是数据库系统?数据库管理系统(DatabaseManagementsystem,简称DBMS)是用户和操作系统之间的数据管理软件,用于管理和组织数据库的创建、访问、操作和维护。数据库(Database,简称DB)是指长期存储在计算机内的,按一定数据模型组织、存储、管理、可共享的数据集合,它包含了数据的结构、关系和约束等信息。数据库应用系统是基于数据库的应用软件系统,通过对数据库的操作和管理来实现特定的业务功能。数据库系统(Databasesystem,简称DBS)是由数据库、数据库管理系统和数据库应用系统组成的集成系统,它是由硬件、软件、数据和人员组合起来为用户提供信息服务的系统,是存储介质、处理对象和管理系统的集合体。3.什么是数据库系统的三级模式结构?并画图表示。数据库系统中的数据是按三级结构、二级映象来组织的,以满足不同层次的用户对数据的需求。这个结构称为数据库的体系结构,也称三级模式结构。这种结构是从数据库管理系统的角度来看的,是数据库系统内部的体系结构。三级模式(外模式、模式、内模式)是对数据的三个抽象级别,二级映象在DBMS内部实现这三个抽象层次的联系和转换。4.信息有哪三种世界?分别具有什么特点?它们之间有什么联系?信息分为现实世界、信息世界、计算机世界。信息的现实世界是指人们要管理的客观存在的各种事物、事务之间的相互联系及事物的发生、变化过程。它客观存在而不依赖于人们的思想。信息世界是现实世界在人们头脑中的反映,人们用思维,以现实世界为基础作进一步的抽象,对事物进行选择、命名、分类等抽象工作之后,并用文字符号表示出来,就形成了信息世界。计算机世界是将信息世界中的信息经过人们的抽象和组织,按照特定的数据结构,即数据模型,将数据存储在计算机中。信息的三种世界之间是可以进行转换的。人们常常首先将现实世界中客观存在的事物或对象抽象为某一种信息结构,这种结构并不依赖于计算机系统,是人们认识的概念模型。然后再将概念模型转换为计算机上某一具体的DBMS支持的数据模型。5.解释概念模型中常用的概念:实体、属性、码、域、实体型、实体集、联系。实体:客观存在并且可以互相区别的事物称为实体。属性:实体所具有的某一特征称为属性。码:能在一个实体集中惟一标识一个实体的属性称为码。域:某个(些)属性的取值范围称为该属性的域。实体型:用实体名及其属性名集合来抽象和刻画的同类实体,称为实体型。实体集:同类型的实体集合称为实体集。联系:联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。
习题21.简述关系模型的完整性规则。关系模型的完整性规则是对关系的某种约束条件。关系模型中可以有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称做是关系的两个不变性,应该由关系系统自动支持。2.关系具有什么特点?通常将关系模型成为关系或表,一个关系对应一张二维表。3.什么是关系规范化?关系规范化的目的是什么?关系规范化的基本方法是什么?INF至BCNF,它们之间的关系是什么?一个低一级范式的关系模式,通过分解可以转换为若干个高一级范式的关系模式,这种过程称为关系的规范化。关系的规范化主要目的是解决数据库中数据冗余、插入异常、删除异常和更新异常等数据存储问题。关系规范化的基本方法是逐步消除关系模式中不合适的数据依赖,使关系模式达到某种程度的分离,也就是说,不要将若干事物混在一起,而要彼此分开,用个关系表示一事或一物,所以,规范化的过程也被认为是“单一化”的过程。从第一范式至BCNF,它们之间的关系是BCNF⊆3NF⊆2NF⊆1NF。从第一范式到第二范式,消除了非主属性对码的部分函数依赖;从第二范式到第三范式,消除了非主属性对码的传递函数依赖;从第三范式到BCNF,消除了关系中冗余的码。4.指出下列关系各属于第几范式。1)学生(学号,姓名,课程号,成绩);2)学生(学号,姓名,性别);3)学生(学号,姓名,院系名,院系地址);4)员工(员工编号,基本工资,岗位级别,岗位工资,奖金,工资总额);5)供应商(供应商编号,零件号,零件名,单价,数量)。答:1)学生(学号,姓名,课程号,成绩);该关系属于第二范式。因为学生的成绩是依赖于学生和课程的关系,不是学生的属性,所以需要将其拆分成两个关系:学生(学号,姓名)和成绩(学号,课程号,成绩)。2)学生(学号,姓名,性别);该关系属于第一范式。每个属性都是原子的,没有重复的属性。3)学生(学号,姓名,院系名,院系地址);该关系属于第一范式。每个属性都是原子的,没有重复的属性。4)员工(员工编号,基本工资,岗位级别,岗位工资,奖金,工资总额);该关系属于第三范式。因为岗位级别和岗位工资是通过员工编号来确定的,所以可以将其拆分成两个关系:员工(员工编号,基本工资,奖金)和岗位(岗位级别,岗位工资)。5)供应商(供应商编号,零件号,零件名,单价,数量)。该关系属于第一范式。每个属性都是原子的,没有重复的属性。
习题31.通过系统服务管理器启动或停止MySQL服务。1)打开命令提示符或终端窗口,以管理员身份运行。2)输入以下命令启动MySQL服务:在Windows上,输入netstartmysql如果MySQL服务已经在运行,可以使用以下命令停止MySQL服务:3)在Windows上,输入netstopmysql。2.通过MySQL的命令行客户端程序先登录MySQL服务器,再退出MySQL。要通过MySQL的命令行客户端程序登录MySQL服务器并退出,可以按照以下步骤进行操作:1)打开命令提示符或终端窗口。2)输入以下命令以登录MySQL服务器:mysql-u用户名-p其中,“用户名”是你在MySQL服务器上的用户名。执行该命令后,系统会提示你输入密码。3)输入密码并按下回车键。如果密码正确,你将成功登录到MySQL服务器,并且命令行提示符会变为mysql>。4)在MySQL服务器上执行你需要的操作,例如执行SQL查询、创建数据库等。5)当你完成操作后,可以使用以下命令退出MySQL客户端程序:exit或者按下Ctrl+D组合键。3.在命令提示符窗口中,如何以管理员身份登录MySQL服务器,使用什么命令?使用以下命令:mysql-uroot-p其中,root是MySQL服务器上的管理员账户名。执行该命令后,系统会提示你输入密码。
习题41.系统中还存在哪些数据库,查看支持的存储引擎类型。1)打开命令提示符或终端窗口。2)输入以下命令以登录MySQL服务器:mysql-u用户名-p其中,“用户名”是你在MySQL服务器上的用户名。执行该命令后,系统会提示你输入密码。3)输入密码并按下回车键。如果密码正确,你将成功登录到MySQL服务器,并且命令行提示符会变为“mysql>”。4)使用以下SQL语句创建名为book的数据库:CREATEDATABASEbook;5)使用以下SQL语句查看MySQL系统中存在的数据库:SHOWDATABASES;6)使用以下SQL语句查看支持的存储引擎类型:SHOWENGINES;2.在NavicatforMySQL中,先使用SQL语句创建salary_managemen数据库,再使用菜单方式删除salary_managemen数据库。CREATEDATABASEsalary_managemen;
习题5有一个员工工资管理数据库salary_managemen,包括三个表:部门表department、员工表employee和工资表salary,这三个表的结构见表5-8、表5-9和表5-10。表5-8部门表department的结构列名数据类型约束说明部门编号定长字符串,长度为2主键,非空值部门编号:2位数字部门名变长字符串,长度为20非空值部门名:20个字符负责人变长字符串,长度为10空值部门负责人:10个字符人数整数类型空值部门人数INT表5-9员工表employee的结构列名数据类型约束说明部门编号定长字符串,长度为2非空值部门编号员工编号定长字符串,长度为4主键,非空值员工编号,4位数字姓名变长字符串,长度为10非空值姓名性别定长字符串,长度为1非空值性别续表列名数据类型约束说明生日DATE生日入职时间DATE入职时间离职时间DATE离职时间在职状态定长字符串,长度为2在职状态:在职、离职、休假表5-10工资表salary的结构列名数据类型约束说明部门编号定长字符串,长度为2非空值部门编号员工编号定长字符串,长度为4非空值员工编号姓名变长字符串,长度为10非空值姓名年月标识DATE非空值年月标识基本工资DECIMAL(10,2)岗位工资绩效工资DECIMAL(10,2)绩效工资补贴DECIMAL(10,2)补贴扣款DECIMAL(10,2)扣款应发工资DECIMAL(10,2)应发工资社保代扣DECIMAL(10,2)社保代扣实发工资DECIMAL(10,2)结算实发1.用SQL语句创建数据库salary_managemen。CREATEDATABASEsalary_managemen;2.用SQL语句创建3个表:部门表department、员工表employee和工资表salary,存储引擎和字符编码均采用默认值。USEsalary_managemen;DROPTABLEIFEXISTSdepartment;CREATETABLEdepartment(部门编号CHAR(2)PRIMARYKEYNOTNULL,部门名VARCHAR(20)NOTNULL,负责人VARCHAR(10),人数INT);DROPTABLEIFEXISTSemployee;CREATETABLEemployee(部门编号CHAR(2)NOTNULL,员工编号CHAR(4)PRIMARYKEYNOTNULL,姓名VARCHAR(10)NOTNULL,性别CHAR(1)NOTNULL,生日DATE,入职时间DATE,离职时间DATE,在职状态CHAR(2));DROPTABLEIFEXISTSsalary;CREATETABLEsalary(部门编号CHAR(2)NOTNULL,员工编号CHAR(4)NOTNULL,姓名VARCHAR(10)NOTNULL,年月标识DATENOTNULL,基本工资DECIMAL(10,2),绩效工资DECIMAL(10,2),补贴DECIMAL(10,2),扣款DECIMAL(10,2),应发工资DECIMAL(10,2),社保代扣DECIMAL(10,2),实发工资DECIMAL(10,2));
习题6重新定义员工工资管理数据库salary_managemen中的表和联系,包括部门表department、员工表employee和工资表salary。这三个表的结构见表6-3、表6-4和表6-5。表6-3部门表department的结构列名数据类型约束说明部门编号定长字符串,长度为2主键部门编号:2位数字部门名变长字符串,长度为20非空值部门名:20个字符负责人变长字符串,长度为10空值部门负责人:10个字符人数整数类型空值部门人数INT表6-4员工表employee的结构列名数据类型约束说明部门编号定长字符串,长度为2外键部门编号员工编号定长字符串,长度为4主键员工编号:4位数字姓名变长字符串,长度为10非空值姓名性别定长字符串,长度为1非空值,默认男性别状态:男、女生日DATE检查约束,生日>'1970-1-1'生日入职时间DATE入职时间离职时间DATE检查约束,离职时间大于入职时间离职时间在职状态定长字符串,长度为2默认值约束,默认在职在职状态:在职、离职、休假表6-5工资表salary的结构列名数据类型约束说明部门编号定长字符串,长度为2外键部门编号员工编号定长字符串,长度为4主键员工编号姓名变长字符串,长度为10非空值姓名年月标识DATE主键年月标识基本工资DECIMAL(10,2)岗位工资绩效工资DECIMAL(10,2)绩效工资补贴DECIMAL(10,2)补贴扣款DECIMAL(10,2)扣款应发工资DECIMAL(10,2)应发工资社保代扣DECIMAL(10,2)社保代扣实发工资DECIMAL(10,2)结算实发1.用SQL语句创建数据库salary_managemen。DROPDATABASEIFEXISTSsalary_managemen;CREATEDATABASEsalary_managemen;2.用SQL语句创建上述三个表,即部门表department、员工表employee和工资表salary,存储引擎和字符编码都采用默认值。USEsalary_managemen;DROPTABLEIFEXISTSdepartment;CREATETABLEdepartment(部门编号CHAR(2)PRIMARYKEY,部门名VARCHAR(20)NOTNULL,负责人VARCHAR(10),人数INT);DROPTABLEIFEXISTSemployee;CREATETABLEemployee(部门编号CHAR(2)REFERENCESdepartment(部门编号)ONUPDATERESTRICTONDELETERESTRICT,员工编号CHAR(4)PRIMARYKEY,姓名VARCHAR(10)NOTNULL,性别ENUM('男','女')NOTNULLDEFAULT'男',生日DATECHECK(生日>'1970-1-1'),#列级只能引用本列的字段入职时间DATE,离职时间DATE,在职状态ENUM('在职','离职','休假')NOTNULLDEFAULT'在职',CONSTRAINTCK_employeeCHECK(离职时间>入职时间) );DROPTABLEIFEXISTSsalary;CREATETABLEsalary(部门编号CHAR(2),员工编号CHAR(4),姓名VARCHAR(10)NOTNULL,年月标识DATE,基本工资DECIMAL(10,2),绩效工资DECIMAL(10,2),补贴DECIMAL(10,2),扣款DECIMAL(10,2),应发工资DECIMAL(10,2),社保代扣DECIMAL(10,2),实发工资DECIMAL(10,2),CONSTRAINTPK_salaryPRIMARYKEY(员工编号,年月标识),CONSTRAINTFK_salaryFOREIGNKEY(部门编号)REFERENCESdepartment(部门编号)ONUPDATECASCADEONDELETECASCADE);3.先显示salary表的外键约束,然后删除salary表的外键约束;再显示salary表表的创建语句,最后再添加该表的外键约束。1)在MySQL中,可以使用以下SQL语句来显示salary表的外键约束:SHOWCREATETABLEsalary;执行以上语句后,将会显示salary表的创建语句,其中包含了外键约束的定义。2)删除salary表的外键约束:ALTERTABLEsalaryDROPFOREIGNKEYFK_salary;3)再显示salary表表的创建语句:SHOWCREATETABLEsalary;4)添加该表的外键约束:ALTERTABLEsalaryADDCONSTRAINTFK_salaryFOREIGNKEY(部门编号)REFERENCESdepartment(部门编号)ONUPDATECASCADEONDELETECASCADE;
习题71.员工工资管理数据库salary_managemen中3个表的记录分别见表7-5、表7-6和表7-7。表7-5department表中的记录部门编号部门名负责人人数11人力部刘一521研发部李四6031市场部周八4041财务部吴九3表7-6employee表中的记录部门编号员工编号姓名性别生日入职时间离职时间在职状态111132刘一女1998-10-232021-04-10在职111152陈二女1995-09-122020-05-15在职111163张三男1992-12-252021-08-012022-04-30离职212151李四男1990-07-082020-11-01在职212175王五男1992-05-072021-03-01在职212192赵六女1998-06-152021-05-012022-03-31离职313121孙七女1996-10-142020-08-10在职313122周八女1998-09-202021-04-01在职414125吴九女1997-12-282022-06-19在职414128郑十女1991-11-192022-08-01在职表7-7salary表中的记录部门编号员工编号姓名年月标识基本工资绩效工资补贴扣款应发工资社保代扣实发工资111132刘一2022-05-01300040002000-500111152陈二2022-05-01300040001000-500111163张三2022-05-01300040001000-500212151李四2022-05-01400050003000-500212175王五2022-05-01400050002000-500212192赵六2022-05-01400050001000-500313121孙七2022-05-01500060002000-500313122周八2022-05-01500060002000-500414125吴九2022-05-01600070003000-500414128郑十2022-05-01600070002000-500111132刘一2022-06-01300040003000-500111152陈二2022-06-01300040001000-500212151李四2022-06-01400050002000-500212175王五2022-06-01400050002000-500313121孙七2022-06-01500060003000-600313122周八2022-06-01500060002000-600414125吴九2022-06-01600070003000-800414128郑十2022-06-01600070002000-800用SQL语句插入表中所有记录。USEsalary_managemen;INSERTINTOdepartment(部门编号,部门名,负责人,人数)VALUES('11','人力部','刘一',5),('21','研发部','李四',60),('31','市场部','周八',40),('41','财务部','吴九',3);INSERTINTOemployee(部门编号,员工编号,姓名,性别,生日,入职时间,离职时间,在职状态)VALUES('11','1132','刘一','女','1998-10-23','2021-04-10',NULL,'在职'),('11','1152','陈二','女','1995-09-12','2020-05-15',NULL,'在职'),('11','1163','张三','男','1992-12-25','2021-08-01','2022-04-30','离职'),('21','2151','李四','男','1990-07-08','2020-11-01',NULL,'在职'),('21','2175','王五','男','1992-05-07','2021-03-01',NULL,'在职'),('21','2192','赵六','女','1998-06-15','2021-05-01','2022-03-31','离职'),('31','3121','孙七','女','1996-10-14','2020-08-10',NULL,'在职'),('31','3122','周八','女','1998-09-20','2021-04-01',NULL,'在职'),('41','4125','吴九','女','1997-12-28','2022-06-19',NULL,'在职'),('41','4128','郑十','女','1991-11-19','2022-08-01',NULL,'在职');INSERTINTOsalary(部门编号,员工编号,姓名,年月标识,基本工资,绩效工资,补贴,扣款)VALUES('11','1132','刘一','2022-05-01','3000','4000','2000','-500'),('11','1152','陈二','2022-05-01','3000','4000','1000','-500'),('11','1163','张三','2022-05-01','3000','4000','1000','-500'),('21','2151','李四','2022-05-01','4000','5000','3000','-500'),('21','2175','王五','2022-05-01','4000','5000','2000','-500'),('21','2192','赵六','2022-05-01','4000','5000','1000','-500'),('31','3121','孙七','2022-05-01','5000','6000','2000','-500'),('31','3122','周八','2022-05-01','5000','6000','2000','-500'),('41','4125','吴九','2022-05-01','6000','7000','3000','-500'),('41','4128','郑十','2022-05-01','6000','7000','2000','-500'),('11','1132','刘一','2022-06-01','3000','4000','3000','-500'),('11','1152','陈二','2022-06-01','3000','4000','1000','-500'),('21','2151','李四','2022-06-01','4000','5000','2000','-500'),('21','2175','王五','2022-06-01','4000','5000','2000','-500'),('31','3121','孙七','2022-06-01','5000','6000','3000','-600'),('31','3122','周八','2022-06-01','5000','6000','2000','-600'),('41','4125','吴九','2022-06-01','6000','7000','3000','-800'),('41','4128','郑十','2022-06-01','6000','7000','2000','-800');2.在salary表中,计算年月标识为2022-05-01的所有记录,计算方法如下:应发工资=基本工资+绩效工资+补贴-扣款假设:社保代扣=(基本工资+绩效工资+补贴)*30%实发工资=应发工资-社保代扣写出实现以上功能的SQL语句。UPDATEsalarySET应发工资=基本工资+绩效工资+补贴-扣款,社保代扣=(基本工资+绩效工资+补贴)*0.30,实发工资=应发工资-社保代扣WHERE年月标识='2022-05-01';
习题81.在salary_managemen数据库中,查询employee表中的所有记录。USEsalary_managemen;SELECT*FROMemployee;2.查询employee表中的“员工编号”、“姓名”、“性别”和“生日”列的所有记录。SELECT员工编号,姓名,性别,生日FROMemployee;3.在employee表中查询“入职时间”在2021年以前的员工记录。SELECT*FROMemployeeWHEREYEAR(入职时间)<2021;4.在salary表中,查询“基本工资”在4000~5000元范围内的员工记录,并显示“部门名”。SELECTsalary.部门编号,department.部门名,员工编号,姓名,年月标识,基本工资,绩效工资,补贴,扣款,应发工资,社保代扣,实发工资FROMsalaryINNERJOINdepartmentONsalary.部门编号=department.部门编号WHERE基本工资BETWEEN4000AND5000;
习题91.在salary_managemen数据库的department表中,定义“部门编号”为唯一索引,以升序排列。然后查看在department表上的索引。USEsalary_managemen;CREATEUNIQUEINDEXdep_noONdepartment(部门编号ASC);SHOWINDEXFROMdepartment;2.在employee表中,创建“部门编号”和“员工编号”的多列索引。然后查看在employee表上的索引。CREATEINDEXdep_empONemployee(部门编号,员工编号);SHOWINDEXFROMemployee;
习题101.在salary_managemen数据库的employee表中,创建名为view_employee的视图,要求该视图包含employee表上所有列和在职员工的记录,且要求今后对该视图数据的修改都必须符合这个条件。USEsalary_managemen;DROPVIEWIFEXISTSview_employee;CREATEVIEWview_employeeASSELECT*FROMemployeeWHERE在职状态='在职'WITHCHECKOPTION;2.使用view_employee视图统计每个部门的员工人数。SELECT部门编号,COUNT(*)人数FROMview_employeeGROUPBY部门编号;
习题111.在salary_managemen数据库中,创建自定义函数,给定姓名,并返回该员工编号。USEsalary_managemen;CREATEFUNCTIONfu_get_id(nameCHAR(10))RETURNSCHAR(4)#返回的员工编号的字符串宽度DETERMINISTICBEGINDECLAREemp_idCHAR(4);#返回的员工编号SELECT员工编号INTOemp_idFROMemployeeWHERE姓名=name;IFemp_idISNULLTHENRETURN'没有该员工';ELSERETURNemp_id;#返回字符串ENDIF;ENDSELECTfu_get_id('张三');2.创建自定义函数,给定部门编号,并返回该部门的部门名、负责人和人数。CREATEFUNCTIONfu_get_dep(dep_idCHAR(2))RETURNSCHAR(50)#返回的部门信息字符串的宽度DETERMINISTICBEGINDECLAREdep_messageCHAR(50);#返回的部门信息DECLAREdep_name,dep_headCHAR(20);DECLAREdep_noINT;SELECT部门名,负责人,人数INTOdep_name,dep_head,dep_noFROMdepartmentWHERE部门编号=dep_id;IFdep_nameISNULLTHENRETURN'没有该部门';ELSESETdep_message=CONCAT(dep_id,dep_name,'负责人:',dep_head,'人数:',dep_no);#连接字符串并赋值RETURNdep_message;#返回的部门信息字符串ENDIF;END;SELECTfu_get_dep('31');
习题121.在salary_managemen数据库中,创建存储过程,给定员工编号,查询其全部工资记录。CREATEPROCEDUREpr_id(INemp_idCHAR(4))READSSQLDATACOMMENT'给定员工编号,查询其全部工资记录'BEGINSELECT*FROMsalaryWHERE员工编号=emp_id;END;CALLpr_id('1152');2.创建存储过程,给定部门编号,在employee表中统计该部门在职人数并显示。CREATEPROCEDUREpr_emp(INdep_idCHAR(2),OUTdep_noINT)DETERMINISTICBEGINSELECTCOUNT(*)INTOdep_noFROMemployeeWHERE部门编号=dep_idAND在职状态='在职';END;SET@d_id='21';SET@d_no=0;CALLpr_emp(@d_id,@d_no);SELECT@d_no;3.创建存储过程,在employee表中统计所有部门的在职人数,并保存到department表中。UPDATEdepartmentSET人数=(SELECTCOUNT(*)FROMemployeeWHEREemployee.部门编号=department.部门编号ANDemployee.在职状态='在职');CREATEPROCEDUREpr_calculateEmployeeCount()BEGINUPDATEdepartmentSET人数=(SELECTCOUNT(*)FROMemployeeWHEREemployee.部门编号=department.部门编号ANDemployee.在职状态='在职');END;这个存储过程使用了子查询来统计每个部门的在职人数,并将结果更新到department表中的“人数”字段中。子查询中的条件是employee表中的“部门编号”与外部查询中的department表中的“部门编号”相匹配。CALLpr_calculateEmployeeCount();SELECT*FROMdepartment;4.创建存储过程,计算所有员工的应发工资、实发工资,并保存到salary表中。CREATEPROCEDUREpr_salary_all()READSSQLDATABEGINUPDATEsalarySET应发工资=基本工资+绩效工资+补贴-扣款,社保代扣=(基本工资+绩效工资+补贴)*0.30,实发工资=应发工资-社保代扣;END;CALLpr_salary_all();5.创建存储过程,在这个存储过程中创建一个游标,在employee表中统计所有部门的在职人数,并保存到department表中。CREATEPROCEDUREpr_calculateEmployeeCount_cur()BEGINDECLAREdepartment_idINT;DECLAREemployee_countINT;DECLAREdoneBOOLEANDEFAULTFALSE;DECLAREcurCURSORFORSELECT部门编号FROMdepartment;DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=TRUE;OPENcur;read_loop:LOOPFETCHcurINTOdepartment_id;IFdoneTHENLEAVEread_loop;ENDIF;SELECTCOUNT(*)INTOemployee_countFROMemployeeWHERE部门编号=department_idAND在职状态='在职';UPDATEdepartmentSET人数=employee_countWHERE部门编号=department_id;ENDLOOP;CLOSEcur;END;这个存储过程会创建一个游标,遍历department表中的每个部门,然后在employee表中统计该部门的在职人数,并将结果更新到department表中的“人数”字段中。CALLpr_calculateEmployeeCount_cur();SELECT*FROMdepartment;
习题131.在salary_managemen数据库中的employee表上定义一个触发器tr_employee_delete,当该员工离职时,把该员工的信息添加到被删除员工记录的表employee_delete中,然后删除employee表中该员工的记录。USEsalary_managemen;--创建被删除员工记录的表employee_deleteCREATETABLEIFNOTEXISTSemployee_delete(department_idCHAR(2),#部门编号employee_idCHAR(4),#员工编号employee_nameVARCHAR(10),#姓名employee_sexCHAR(1),#性别employee_birthdayDATE,#生日entry_dateDATE,#入职时间resignation_dateDATE#离职时间);SHOWTRIGGERS;DROPTRIGGERIFEXISTStr_employee_delete;--创建触发器tr_employee_deleteCREATETRIGGERtr_employee_deleteAFTERDELETEONemployeeFOREACHROWBEGININSERTINTOemployee_delete(department_id,employee_id,employee_name,employee_sex,employee_birthday,entry_date,resignation_date)VALUES(OLD.部门编号,OLD.员工编号,OLD.姓名,OLD.性别,OLD.生日,OLD.入职时间,CURDATE());END;以上代码中,首先创建了一个名为employee_delete的表,用于存储被删除员工的信息。然后创建了一个名为tr_employee_delete的触发器,当employee表中的记录被删除时,触发器会将被删除员工的信息插入到employee_delete表中。最后,通过执行DELETE语句来删除employee表中指定员工的记录。指定要删除的员工的实际编号。--删除employee表中的员工记录,删除1163号员工,触发执行tr_employee_deleteDELETEFROMemployeeWHERE员工编号='1163';--查看employee表中的记录SELECT*FROMemployee;--查看employee_delete表中的记录SELECT*FROMemployee_delete;2.创建事件ev_count,每月1日自动计算每个部门的员工人数,并更新到department表中。--创建事件ev_countCREATEEVENTIFNOTEXISTSev_countONSCHEDULEEVERY1MONTHSTARTS'2023-01-0100:00:00'DOBEGINUPDATEdepartmentSET人数=(SELECTCOUNT(*)FROMemployeeWHEREemployee.部门编号=department.部门编号);END;以上代码创建了一个名为ev_count的事件,该事件会在每个月的1日自动触发。事件中的代码会统计每个部门的员工人数,并将结果更新到department表中的“人数”字段中。代码中的日期'2023-01-0100:00:00'可以根据实际情况进行修改,以指定事件的开始时间。3.先查看salary_managemen数据库中的触发器,然后删除触发器tr_employee_delete。SHOWTRIGGERSINsalary_managemen;--删除触发器tr_employee_deleteDROPTRIGGERIFEXISTStr_employee_delete;使用DROPTRIGGER语句删除触发器tr_employee_delete,如果存在对应的触发器,则会将其删除。4.先查看事件,然后删除事件ev_count。SHOWEVENTS;--删除事件ev_countDROPEVENTIFEXISTSev_count;使用DROPEVENT语句删除事件ev_count,如果存在对应的事件,则会将其删除。
习题141.在salary_managemen数据库中创建一个存储过程pr_salary_insert,开启一个事务,向salary表中添加一条记录,然后提交事务。--创建存储过程pr_salary_insertDELIMITER//CREATEPROCEDUREpr_salary_insert()BEGINDECLAREEXITHANDLERFORSQLEXCEPTIONBEGINROLLBACK;RESIGNAL;END;STARTTRANSACTION;INSERTINTOsalary(employee_id,salary_amount,salary_date)VALUES(<employee_id>,<salary_amount>,CURDATE());COMMIT;END以上代码创建了一个名为pr_salary_insert的存储过程。在存储过程中,首先使用DECLARE语句定义了一个异常处理程序,用于在出现异常时回滚事务并重新抛出异常。然后使用STARTTRANSACTION语句开启一个事务。在事务中,通过INSERTINTO语句向salary表中插入一条记录,其中<employee_id>和<salary_amount>需要替换为实际的员工ID和薪水金额。最后使用COMMIT语句提交事务。2.开启一个事务,向department表中添加一条记录,并设置保存点,然后删除该记录,并回滚到事务的保存点,提交事务。--开启事务,向department表中添加一条记录,并设置保存点STARTTRANSACTION;SAVEPOINTsp_department;INSERTINTOdepartment(department_name)VALUES('NewDepartment');--删除该记录,并回滚到事务的保存点DELETEFROMdepartmentWHEREdepartment_name='NewDepartment';ROLLBACKTOSAVEPOINTsp_department;--提交事务COMMIT;以上代码展示了如何开启一个事务,在事务中向department表中添加一条记录,并设置一个保存点。然后,通过DELETE语句删除该记录,并使用ROLLBACKTOSAVEPOINT将事务回滚到保存点。最后,使用COMMIT语句提交事务。请注意,代码中的'NewDepartment'部分需要根据实际情况进行替换。
习题151.使用SHOWVARIABLES语句查询当前日志设置。SHOWVARIABLESLIKE'log_%';以上代码使用SHOWVARIABLES语句查询当前日志设置。通过LIKE'log_%'筛选出以"log_"开头的变量,即与日志相关的变量。执行该语句后,会返回所有与日志相关的变量及其对应的值。2.使用SHOWBINARYLOGS语句查看二进制日志的个数及文件名。SHOWBINARYLOGS;以上代码使用SHOWBINARYLOGS语句查看二进制日志的个数及文件名。执行该语句后,会返回当前服务器上的二进制日志文件列表,包括文件名和文件大小等信息。3.使用“记事本”查看MySQL错误日志文件。要使用记事本(Notepad)查看MySQL错误日志文件,您可以按照以下步骤操作:1)打开资源管理器(Windows键+E)。2)导航到MySQL错误日志文件的位置。通常情况下,MySQL错误日志文件位于MySQL安装目录的`data`文件夹中。例如,`C:\ProgramFiles\MySQL\MySQLServer8.0\data`。3)在`data`文件夹中找到名为`error.log`或`mysql_error.log`的文件,这是MySQL错误日志文件。4)右键单击该文件,选择“打开方式”,然后选择“记事本”或“Notepad”打开文件。现在,可以使用记事本查看MySQL错误日志文件的内容。请注意,如果日志文件非常大,记事本可能无法打开或处理它。在这种情况下,您可以尝试使用其他文本编辑器,如Notepad++或SublimeText,这些编辑器对大型文件有更好的处理能力。
习题161.使用mysqldump命令备份数据库salary_managemen中的所有表。要使用mysqldump命令备份数据库salary_managemen中的所有表,您可以按照以下步骤操作:1)打开命令提示符或终端窗口。2)输入以下命令,并将其中的username替换为您的MySQL用户名,password替换为您的MySQL密码,database_name替换为您要备份的数据库名称(在这种情况下是salary_managemen),以及backup_file.sql替换为您要保存备份的文件路径和名称。mysqldump-uusername-ppassworddatabase_name>backup_file.sql例如,如果您的MySQL用户名是root,密码是password,要备份的数据库是salary_managemen,并且您想将备份保存为C:\backup\salary_managemen_backup.sql,则命令如下:mysqldump-uroot-ppasswordsalary_managemen>C:\backup\salary_managemen_backup.sql3)执行命令后,系统会提示您输入MySQL密码。输入密码后,命令会开始执行备份操作。4)备份完成后,您将在指定的文件路径中找到名为backup_file.sql的备份文件,其中包含了数据库salary_managemen中所有表的数据和结构。请注意,mysqldump命令需要正确配置在系统的环境变量中,以便在任何位置都可以运行该命令。另外,备份文件是一个纯文本文件,可以使用文本编辑器打开和查看其内容。2.使用mysqldump命令备份数据库salary_managemen中的employee表。要使用mysqldump命令备份数据库salary_managemen中的employee表,您可以按照以下步骤操作:1)打开命令提示符或终端窗口。2)输入以下命令,并将其中的username替换为您的MySQL用户名,password替换为您的MySQL密码,database_name替换为您要备份的数据库名称(在这种情况下是salary_managemen),以及backup_file.sql替换为您要保存备份的文件路径和名称。mysqldump-uusername-ppassworddatabase_nameemployee>backup_file.sql例如,如果您的MySQL用户名是root,密码是password,要备份的数据库是salary_managemen,并且您想将备份保存为C:\backup\employee_backup.sql,则命令如下:mysqldump-uroot-ppasswordsalary_managemenemployee>C:\backup\employee_backup.sql3)执行命令后,系统会提示您输入MySQL密码。输入密码后,命令会开始执行备份操作。4)备份完成后,您将在指定的文件路径中找到名为backup_file.sql的备份文件,其中包含了数据库salary_managemen中employee表的数据和结构。请注意,mysqldump命令需要正确配置在系统的环境变量中,以便在任何位置都可以运行该命令。另外,备份文件是一个纯文本文件,可以使用文本编辑器打开和查看其内容。3.使用mysql命令将数据库salary_managemen中的employee表的备份文件恢复到数据库salary_managemen中。为避免主键冲突,要用REPLACEINTOTABLE直接将数据进行替换来恢复数据。要使用mysql命令将数据库salary_managemen中的employee表的备份文件恢复到数据库salary_managemen中,并使用REPLACEINTOTABLE来替换数据以避免主键冲突,您可以按照以下步骤操作:1)打开命令提示符或终端窗口。2)输入以下命令,并将其中的username替换为您的MySQL用户名,password替换为您的MySQL密码,database_name替换为您要恢复数据的数据库名称(在这种情况下是salary_managemen),以及backup_file.sql替换为您的备份文件路径和名称。mysql-uusername-ppassworddatabase_name<backup_file.sql例如,如果您的MySQL用户名是root,密码是password,要恢复数据的数据库是salary_managemen,并且您的备份文件是C:\backup\employee_backup.sql,则命令如下:mysql-uroot-ppasswordsalary_managemen<C:\backup\employee_backup.sql3)执行命令后,系统会提示您输入MySQL密码。输入密码后,命令会开始执行数据恢复操作。4)数据恢复完成后,备份文件中的数据将被导入到数据库salary_managemen的employee表中,并使用REPLACEINTOTABLE来替换数据以避免主键冲突。请注意,确保备份文件是正确的SQL语句格式,并且与数据库结构和数据类型匹配。此外,mysql命令需要正确配置在系统的环境变量中,以便在任何位置都可以运行该命令。4.把salary_managemen数据库中department表的记录导出为一个文本文件。要将数据库salary_managemen中department表的记录导出为一个文本文件,您可以按照以下步骤操作:1)打开命令提示符或终端窗口。2)输入以下命令,并将其中的username替换为您的MySQL用户名,password替换为您的MySQL密码,database_name替换为您要导出数据的数据库名称(在这种情况下是salary_managemen),以及output_file.txt替换为您要输出的文本文件路径和名称。mysql-uusername-ppassword-e"SELECT*FROMdatabase_name.department">output_file.txt例如,如果您的MySQL用户名是root,密码是password,要导出数据的数据库是salary_managemen,并且您要输出的文本文件是C:\output\department_records.txt,则命令如下:mysql-uroot-ppasswo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年苏教版高中一年级物理必修第一册第3章测试卷及答案
- 2026年经济公证业务考核试卷及答案
- 网络直播平台合作销售协议三篇
- 2026中加国际合作智能农业机械行业市场动态供需关系调研及未来行业投资布局计划
- 2026助眠香薰精油液体配方消费者敏感度市场接受度驱动感觉调节效果市场销售策略方案
- 结核病护理知识
- 2026中国仓储物流智能化升级与降本增效研究报告
- 高二会考多媒体素材处理实操题
- 2026珠三角母婴用品行业市场供需结构投资前景规划分析研究
- 2026中国中医药现代化进程中标准化体系建设与国际化路径分析
- 铁路钢轨打磨课件
- 新疆医保知识培训课件
- 商品归类考试题目及答案
- 危险化学品镁存储安全操作规程
- 美容解剖学课件
- 尿动力学检查患者的护理
- QGDW1512-2014电力电缆及通道运维规程
- 家庭教育中的数字媒体素养教育实践
- T/HPBA 1-2021预制混凝土外墙接缝密封防水技术标准
- 人教版八年级物理上册全册知识要点复习提纲
- 饲料生产许可证考试(判断题200题)附有答案
评论
0/150
提交评论