MySQL数据库系统原理与应用章节练习题及答案.docx
1 .什么是数据?什么是信息?什么是数据处理?数据是指存储在某一种媒体上的能够识别的物理符号,用来记录事物的情况,用类型和值来表征。不同的数据类型,记录的事物性质不同。信息是经过加工处理的有用的数据。数据只有经过提炼和抽象变成有用的数据才能成为信息。信息仍以数据的形式表现。数据处理是指将数据加工转换成信息的过程。数据处理也叫信息处理。通过处理数据可以获得信息,通过分析和筛选信息可以产生决策。2 .什么是数据库管理系统?什么是数据库?什么是数据库应用系统?什么是数据库系统?数据库管理系统(DatabaSeManagementsystem,简称DBMS)是用户和操作系统之间的数据管理软件,用于管理和组织数据库的创建、访问、操作和维护。数据库(DaIabase,简称DB)是指长期存储在计算机内的,按一定数据模型组织、存储、管理、可共享的数据集合,它包含了数据的结构、关系和约束等信息。数据库应用系统是基于数据库的应用软件系统,通过对数据库的操作和管理来实现特定的业务功能。数据库系统(DatabaSeSyStem,简称DBS)是由数据库、数据库管理系统和数据库应用系统组成的集成系统,它是由硬件、软件、数据和人员组合起来为用户提供信息服务的系统,是存储介质、处理对象和管理系统的集合体。3 .什么是数据库系统的三级模式结构?并画图表示。数据库系统中的数据是按三级结构、二级映象来组织的,以满足不同层次的用户对数据的需求。这个结构称为数据库的体系结构,也称三级模式结构。这种结构是从数据库管理系统的角度来看的,是数据库系统内部的体系结构。三级模式(外模式、模式、内模式)是对数据的三个抽象级别,二级映象在DBMS内部实现这三个抽象层次的联系和转换。4 .信息有哪三种世界?分别具有什么特点?它们之间有什么联系?信息分为现实世界、信息世界、计算机世界。信息的现实世界是指人们要管理的客观存在的各种事物、事务之间的相互联系及事物的发生、变化过程。它客观存在而不依赖于人们的思想。信息世界是现实世界在人们头脑中的反映,人们用思维,以现实世界为基础作进一步的抽象,对事物进行选择、命名、分类等抽象工作之后,并用文字符号表示出来,就形成了信息世界。计算机世界是将信息世界中的信息经过人们的抽象和组织,按照特定的数据结构,即数据模型,将数据存储在计算机中。信息的三种世界之间是可以进行转换的。人们常常首先将现实世界中客观存在的事物或对象抽象为某一种信息结构,这种结构并不依赖于计算机系统,是人们认识的概念模型。然后再将概念模型转换为计算机上某一具体的DBMS支持的数据模型。5 .解释概念模型中常用的概念:实体、属性、码、域、实体型、实体集、联系。实体:客观存在并且可以互相区别的事物称为实体。属性:实体所具有的某一特征称为属性。码:能在一个实体集中惟一标识一个实体的属性称为码。域:某个(些)属性的取值范围称为该属性的域。实体型:用实体名及其属性名集合来抽象和刻画的同类实体,称为实体型。实体集:同类型的实体集合称为实体集。联系:联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。.简述关系模型的完整性规则。关系模型的完整性规则是对关系的某种约束条件。关系模型中可以有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称做是关系的两个不变性,应该由关系系统自动支持。2 .关系具有什么特点?通常将关系模型成为关系或表,一个关系对应一张二维表。3 .什么是关系规范化?关系规范化的目的是什么?关系规范化的基本方法是什么?INF至BCNF,它们之间的关系是什么?一个低一级范式的关系模式,通过分解可以转换为若干个高一级范式的关系模式,这种过程称为关系的规范化。关系的规范化主要目的是解决数据库中数据冗余、插入异常、删除异常和更新异常等数据存储问题。关系规范化的基本方法是逐步消除关系模式中不合适的数据依赖,使关系模式达到某种程度的分离,也就是说,不要将若干事物混在一起,而要彼此分开,用个关系表示一事或一物,所以,规范化的过程也被认为是“单一化”的过程。从第一范式至BCNF,它们之间的关系是BCNFG3NFG2NFG1NF。从第一范式到第二范式,消除了非主属性对码的部分函数依赖;从第二范式到第三范式,消除了非主属性对码的传递函数依赖;从第三范式到BCNF,消除了关系中冗余的码。4.指出下列关系各属于第几范式。1)学生(学号,姓名,课程号,成绩);2)学生(学号,姓名,性别);3)学生(学号,姓名,院系名,院系地址);4)员工(员工编号,基本工资,岗位级别,岗位工资,奖金,工资总额);5)供应商(供应商编号,零件号,零件名,单价,数量)。答:1)学生(学号,姓名,课程号,成绩);该关系属于第二范式。因为学生的成绩是依赖于学生和课程的关系,不是学生的属性,所以需要将其拆分成两个关系:学生(学号,姓名)和成绩(学号,课程号,成绩)。2)学生(学号,姓名,性别);该关系属于第一范式。每个属性都是原子的,没有重复的属性。3)学生(学号,姓名,院系名,院系地址);该关系属于第一范式。每个属性都是原子的,没有重复的属性。4)员工(员工编号,基本工资,岗位级别,岗位工资,奖金,工资总额);该关系属于第三范式。因为岗位级别和岗位工资是通过员工编号来确定的,所以可以将其拆分成两个关系:员工(员工编号,基本工资,奖金)和岗位(岗位级别,岗位工资)。5)供应商(供应商编号,零件号,零件名,单价,数量)。该关系属于第一范式。每个属性都是原子的,没有重复的属性。1 .通过系统服务管理器启动或停止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>o4)在MySQL服务器上执行你需要的操作,例如执行SQL查询、创建数据库等。5)当你完成操作后,可以使用以下命令退出MySQL客户端程序:exit或者按下Ctrl+D组合键。3 .在命令提示符窗口中,如何以管理员身份登录MySQL服务器,使用什么命令?使用以下命令:mysql-uroot-p其中,root是MySQL服务器上的管理员账户名。执行该命令后,系统会提示你输入密码。1.使用MySQLCommandLineClient登录MySQL服务器,先用SQL语句创建book数据库,再查看MySQL系统中还存在哪些数据库,查看支持的存储引擎类型。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;有一个员工工资管理数据库salary_managemen»包括三个表:部门表department员工表employee和工资表SaIary,这三个表的结构见表5-8、表5-9和表5-10。表5-8部门表department的结构歹IJ名数据类型约束说明部门编号定长字符串,长度为2主键,非空值部门编号:2位数字部门名变长字符串,长度为20非空值部门名:20个字符负资人变长字符串,长度为K)空值部门负责人:K)个字符人数整数类型空值部门人数INT表5-9员工表employee的结构列名数据类型约束说明部门编号定长字符串,长度为2非空值部门编号员工编号定长字符串,长度为4主键,非空值员工编号,4位数字姓名变长字符串,长度为IO非空值姓名性别定长字符串,长度为I非空值性别续表列名数据类型约束说明生日DATEz,l:入职时间DATE入职时间离职时间DATE离职时间在职状态定长字符串,长度为2在职状态:在职、离职、休假表5-10工资表SaIary的结构歹U名数据类型约束说明部门编号定长字符串,长度为2非空值部门编号员工编号定长字符串,长度为4非空值员工编号姓名变长字符串,长度为IO非空值姓名年月标识DATE非空值年月标识基本工资DEClMAL(10,2)岗位工资绩效工资DECIMAL(10,2)绩效工资补贴DECIMAL(10,2)补贴扣款DECiMAL(10,2)扣款应发工资DECiMAL(10,2)应发工资社保代扣DECIMAL(10,2)社保代扣实发工资DECIMAL(10,2)结算实发1 .用SQL语句创建数据库salary_managemenoCREATEDATABASEsalary_managemen;2 .用SQL语句创建3个表:部门表departments员工表employee和工资表salary,存储引擎和字符编码均采用默认值。USEsalary_managemen;DROPTABLEIFEXISTSdepartment;CREATETABLEdepartment(部门编号CHAR(2)PRIMARYKEYNOTNULL,部门名VARCHAR(20)NOTNULL,负责人VARCHAR(IO),人数INT);DROPTABLEIFEXISTSemployee;CREATETABLEemployee(部门编号CHAR(2)NOTNULL,员工编号CHAR(4)PRIMARYKEYNOTNULL,姓名VARCHAR(IO)NOTNULL,性别CHAR(I)NOTNULL,生日DATE,入职时间DATE,离职时间DATE,在职状态CHAR(2)DROPTABLEIFEXISTSsalary;CREATETABLEsalary(部门编号CHAR(2)NOTNULL,员工编号CHAR(4)NOTNULL,姓名VARCHAR(IO)NOTNULL,年月标识DATENOTNULL,基本工资DEClMAL(IO,2),绩效工资DECIMAL(Io,2),补贴DEClMAL(Io,2),扣款DECIMAL(10,2),应发工资DECIMAL(IO,2),社保代扣DECIMALd0,2),实发工资DECIMALd0,2)重新定义员工工资管理数据库salary_managemen中的表和联系,包括部门表department.员工表employee和工资表salary(,这三个表的结构见表6-3、表6-4和表6-5。表6-3部门表department的结构歹IJ名数据类型约束说明部门编号定长字符串,长度为2主键部门编号:2位数字部门名变长字符串,长度为20非空值部门名:20个字符负责人变长字符用,长度为10空值部门负贡人:10个字符人数整数类型空值部门人数INT表6-4员工表employee的结构歹4名数据类型约束说明部门编号定长字符串,长度为2外健部门编号员工编号定长字符串,长度为4主键员工编号:4位数字姓名变长字符串,长度为10非空值姓名性别定长字符串,长度为I非空值,默认男性别状态:男、女生日DATE检查约束,生日970-l'生日入职时间DATE入职时间离职时间DATE检查约束,离职时间大于入职时间离职时间在职状态定长字符串,长度为2默认值约束,默认在职在职状态:在职、离职、休假表6-5工资表SaIary的结构歹名数据类型约束说明部门编号定长字符串,长度为2外键部门编号员工编号定长字符串,长度为4主键员工编号姓名变长字符串,长度为IO非空值姓名年月标识DATE主键年月标识基本工资DECIMAU10,2)岗位工资绩效工资DECIMAU10.2)绩效工资补贴Decimaui0.2)补贴扣款Decimaui0.2)扣款应发工资DECIMALX10,2)应发工资社保代扣DEC1MAL(10,2)社保代扣实发工资DECIMAU10,2)结算实发1 .用SQL语句创建数据库salary-managemen。DROPDATABASEIFEXISTSsalary_managemen;CREATEDATABASEsalary_managemen;2 .用SQL语句创建上述三个表,即部门表departments员工表employee和工资表salary,存储引擎和字符编码都采用默认值。USEsalary_managemen;DROPTABLEIFEXISTSdepartment;CREATETABLEdepartment(部门编号CHAR(2)PRIMARYKEY,部门名VARCHAR(20)NOTNULL,负责人VARCHAR(10),人数INTDROPTABLEIFEXISTSemployee;CREATETABLEemployee(部门编号CHAR(2)REFERENCESdepartment(部门编号)ONUPDATERESTRICTONDELETERESTRICT,员工编号CHAR(4)PRIMARYKEY,姓名VARCHAR(Io)NoTNULL,性别ENUMC男?女,)NOTNULLDEFAUL男,,生日DATECHECK(4日1970-l-),#列级只能引用本列的字段入职时间DATE,离职时间DATE,在职状态ENUMC在职离职;休假,)NOTNULLDEFAULT¾V,CONSTRAINTCK.employeeCHECK(离职时间入职时间)DROPTABLEIFEXISTSsalary;CREATETABLEsalary(部门编号CHAR(2),员工编号CHAR(4),姓名VARCHAR(IO)NoTNULL,年月标识DATE,基本工资DEClMAL(Io,2),绩效工资DECIMAL(IO,2),补贴DECIMAL(10,2),扣款DECIMAL(10,2),应发工资DEClMAL(IO,2),社保代扣DECIMAL(Io,2),实发工资DECIMAL(IO,2),CONSTRAINTPK_salaryPRIMARYKEY(员工编号,年月标识),CONSTRAINTFK_salaryFOREIGNKEY(部门编号)REFERENCESdepartment®11编号)ONUPDATECASCADEONDELETECASCADE);3 .先显示SaIary表的外键约束,然后删除Salary表的外键约束;再显示Salary表表的创建语句,最后再添加该表的外键约束。1)在MySQL中,可以使用以下SQL语句来显示SaIary表的外键约束:SHOWCREATETABLEsalary;执行以上语句后,将会显示Salary表的创建语句,其中包含了外键约束的定义。2)删除SaIary表的外键约束:ALTERTABLEsalaryDROPFOREIGNKEYFK_salary;3)再显示SaIary表表的创建语句:SHOWCREATETABLEsalary;4)添加该表的外键约束:ALTERTABLEsalaryADDCONSTRAINTFK.salaryFOREIGNKEY(部门编号)REFERENCESdepartment(部门编号)ONUPDATECASCADEONDELETECASCADE;1 .员工工资管理数据库salary_managemen中3个表的记录分别见表7-5、表7-6和表7-7。表7-5department表中的记录部门编号部门名负责人人数Il人力部刘一521研发部李四6031市场部周八4041财务部吴九3表76employee表中的记录部门编号员工编号姓名性别生日入职时间离职时间在职状态111132刘一女1998-10-232021-04-10在职Il1152陈二女1995-09-122020-05-15在职Il1163张三男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-7SaIary表中的记录部门编号员工编号姓名年月标识基本工资绩效工资补贴扣款应发工资社保代扣实发工资Il1132刘一2022-05-01300040002000500Il1152陈二2022-05-0130004000100O500Il1163张三2022-05-0130004(XX)I(KX)-500212151李四2022-05-01400050003000-500212175王五2022-05-014000502000-500212192赵六2022-05-0140005000100O-500313121孙七2022-05-0150006(XX)2000-500313122周八2022-05-0150006(X)020500414125吴九2022-05-01600070003000-500414128郑十2022-05-0160(X)7(XX)2(XX)-500111132刘一2022-06-01300040003000-5(X)Il1152陈二2022-06-0130004000I(XX)-500212151李四2022-06-01400050002000-500212175王五2022-06-01400050002000-500313121孙七2022-06-015(X)060003000-600313122周八2022-06-01500060002000-600414125吴九2022-06-016(X)070003000800414128郑十2022-06-016070002000-800用SQL语句插入表中所有记录。USEsalary_managemen;INSERTlNTodePartment(部门编号,部门名,负责人,人数)VALUES(11丁人力部7刘一;5),(21丁研发部丁李四;60),(31市场部二周八140),('41财务部吴九;3);INSERTINTOemployee(部门编号,员工编号,姓名,性别,生日,入职时间,离职时间,在职状态)VALUES('11'J1132','文J-'女','19981023','20210410',NULL,'在职'),('11','1152;'陈二,'女','1995-09-12','2020-05-15',NULL,'在职'),('11','1163',张三','男'1992-12-25;'2021-08-01','2022-04-30','离职'),('21','2151','李四丁男'19900708','2020ll0r,NULL'在职'),(,2,2175,三E,'M,1992-05-07,2021-03-0,NULLj在职'),('27,'2192;'赵六','女'1998-06-15','2021-05-01','2022-03-31','离职)(,31','3121丁孙七丁女丁19961014','20200810',NULLj在职)(31,'3122',周八',女,'1998-09-20','2021-04-01',NULL,'在职'),('4,'4125:'吴九丁女,1997-12-28','2022-06-19',NULLj在职'),('41','4128','郑十',女,'1991-11-19','2022-08-01',NULL,在职,);INSERTlNToSalary(部门编号,员工编号,姓名,年月标识,基本工资,绩效工资,补贴,扣款)VALUES(,11'1132','2022-05-0,'3000',4000,2000,-500,),(,1,1152,2022-05-0r,3000,4000,1000,-500,),(,ir,1163,三,2022-05-01,3000,4000,1000,-500'),(,2,215,2022-05-0,4000,5000,'3000',-5,),(,2,2175,三三,2022-05-0,4000,50,'2000',-5,),(,2,2192,t,<7s',2022-05-0,4000,5000'1OOO,-500,),('31','3121','孙七','202205-01','5OOO','6000','2000','5OO'),(,31,3122,9'JSyk',2022-05-0,5OOO',6000,2000,-5OO'),(,4,4125,2022-05-0,6000,7000,3000,-500,),(,4,4128,'3+,2022-05-0,60,70,'2000',-5,),(,1,1132,M-,2022-06-01'3OOO','4000','3OOO,-5OO'),(,1,1152,2022-06-0,'3OOO',4000,1OOO,-5OO,),('21',2151',2022-06-0,4000,5OOO'2000',-5OO,),(,21,2175,'三三','2022-06-01',4000,5000,2000,-5,),(,3,312,4s,2022-06-0,5000,6000,3000,-600,),(,3,(3122,JI','2022-06-0,5000,6000'2000',-600,),(,41,4125,2022-06-01,6000,7000,3000,-800'),(,41,4128,5+,2022-06-0,6000,7000;'2000',-800,);2 .在SaIary表中,计算年月标识为2022-05-01的所有记录,计算方法如下:应发工资=基本工资+绩效工资+补贴-扣款假设:社保代扣=(基本工资+绩效工资+补贴)*30%实发工资=应发工资-社保代扣写出实现以上功能的SQL语句。UPDATEsalarySET应发工资=基本工资+绩效工资+补贴-扣款,社保代扣=(基本工资+绩效工资+补贴)*0.30,实发工资=应发工资-社保代扣WHERE年月标识=,2022-05-0;1 .在salary_managemen数据库中,查询employee表中的所有记录。USEsalary_managemen;SELECT*FROMemployee;2 .查询employee表中的“员工编号”、“姓名”、“性别”和“生日”列的所有记录。SELECT员工编号,姓名,性别,生日FROMemployee;3 .在employee表中查询“入职时间”在2021年以前的员工记录。SELECT*FROMemployeeWHEREYEAR(入职时间)2021;4 .在Salary表中,查询“基本工资”在40005000元范围内的员工记录,并显示“部门名”。SELECTSaIary.部门编号,department.部门名,员工编号,姓名,年月标识,基本工资,绩效工资,补贴,扣款,应发工资,社保代扣,实发工资FROMsalaryINNERJOINdepartmentONSaIary.部门编号=department.部门编号WHERE基本工资BETWEEN4000AND5000;1 .在salary_managemen数据库的department表中,定义"部门编号”为唯一索引,以升序排列。然后查看在department表上的索引。USEsalary_managemen;CREATEUNIQUEINDEXdep_noONdepartment部门编号ASC);SHOWINDEXFROMdepartment;2 .在employee表中,仓”建"部门编号”和“员工编号”的多歹IJ索弓I。然后查看在employee表上的索引。CREATEINDEXdep_empONemployee(部门编号,员工编号);SHOWINDEXFROMemployee;1 .在salary_managemen数据库的employee表中,创建名为VieW.employee的视图,要求该视图包含employee表上所有列和在职员工的记录,且要求今后对该视图数据的修改都必须符合这个条件。USEsalary_managemen;DROPVIEWIFEXISTSview_employee;CREATEVIEWview_employeeASSELECT*FROMemployeeWHERE在职状态=,在职,WITHCHECKOPTION;2 .使用VieW.employee视图统计每个部门的员工人数。SELECT部门编号,COUNT(*)人数FROMview_employeeGROUPBY部门编号;1 .在Salary_managemen数据库中,创建自定义函数,给定姓名,并返回该员工编号。USEsalary_managemen;CREATEFUNCTIONfu_get_id(nameCHAR(IO)RETURNSCHAR(4)#返回的员工编号的字符串宽度DETERMINISTICBEGINDECLAREemp_idCHAR(4);#返回的员工编号SELECT员工编号INTOemPJdFROMemployeeWHERE姓名=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,'人数1,depjo);#连接字符串并赋值RETURNdep_message;#返回的部门信息字符串ENDIF;END;SELECTfu-get-dep(,31,);1 .在SalaryJianagemen数据库中,创建存储过程,给定员工编号,查询其全部工资记录。CREATEPROCEDUREprJd(INemp_idCHAR(4)READSSQLDATACOMMEN给定员工编号,查询其全部工资记录BEGINSELECT*FROMsalaryWHERE员工编号=emp_id;END;CALLprjd('1152,);2 .创建存储过程,给定部门编号,在employee表中统计该部门在职人数并显示。CREATEPROCEDUREpr_emp(INdep_idCHAR(2),OUTdep_noINT)DETERMINISTICBEGINSELECTCOUNT(*)INTOdep_noFROMemployeeWHERE部门编号=dep_idAND在职状态T在职二END;SETLidH2;SETd_no=0;CALLpr_emp(d_id,d_no);SELECTd_no;3 .创建存储过程,在employee表中统计所有部门的在职人数,并保存到department表中。UPDATEdepartmentSET人数=(SELECTCOUNT(*)FROMemployeeWHEREemployee.部门编号=d叩artment.部门编号ANDemployee.在职状态='在职,);CREATEPROCEDUREpr_calculateEmployeeCount()BEGINUPDATEdepartmentSET人数=(SELECTCOUNT(*)FROMemployeeWHEREemployee.部门编号=department.部门编号ANDemployee.在职状态='在职,);END;这个存储过程使用了子查询来统计每个部门的在职人数,并将结果更新到department表中的“人数”字段中。子查询中的条件是employee表中的“部门编号”与外部查询中的department表中的“部门编号”相匹配。CALLPjCalCUklteEmPloyeeCOUnt();SELECT*FROMdepartment;4 .创建存储过程,计算所有员工的应发工资、实发工资,并保存到Salary表中。CREATEPROCEDUREpr_salary_all()READSSQLDATABEGINUPDATEsalarySET应发工资=基本工资+绩效工资+补贴-扣款,社保代扣=(基本工资+绩效工资+补贴)*0.30,实发工资=应发工资-社保代扣;END;CALLpr_salary_all();5 .创建存储过程,在这个存储过程中创建一个游标,在employee表中统计所有部门的在职人数,并保存到department表中。CREATEPROCEDUREpr_calculaleEmployeeCount_cur()BEGINDECLAREdepartment_idINT;DECLAREemployee_countINT;DECLAREdoneBOOLEANDEFAULTFALSE;DECLAREcurCURSORFORSELECT部门编号FROMdepartment;DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=TRUE;OPENcur;read_loop:LOOPFETCHcurINTOdepartmentjd;IFdoneTHEN1.EAVEread_loop;ENDIF;SELECTCOUNT(*)INTOemployee_countFROMemployeeWHERE部门编号=department_idAND在职或态=,在职二