tp框架做的网站/市场营销案例分析及解答
目录
- 1. 题目
- 1.1 存储过程
- 1.2 存储函数
- 1.3 事务处理
- 2. 解答
- 2.1 存储过程
- 2.2 存储函数
- 2.3 事务处理
1. 题目
1.1 存储过程
-
创建表
RandNumber
:字段:id
自增长,data int
; 创建存储过程向表中插入指定个数的随机数(1-99
),但如果插入的数为50
,则终止插入。 -
创建存储过程,根据员工的工作时间,如果大于
6
年时,将其转到经理办公室工作,并调用该存储过程。 -
创建存储过程,比较两个员工的实际收入,若前者比后者高输出
1
,若两者相等输出0
,若后者比前者高输出-1
,并调用该存储过程。 -
创建存储过程
p(in name char(10),out income decimal(7,2))
,计算一个员工的实际收入,并调用该存储过程,将员工 朱骏 的实际收入保存在一个用户变量中。 -
创建存储过程
raise(in edu char(6),in x decimal(5,1))
将所有某种学历的员工的收入提高%x
, 并调用该存储过程,将所有硕士学历的员工的收入提高10%
。
1.2 存储函数
-
创建存储函数
getAver(did int)
,计算某个部门的平均工资(实际收入); -
调用该函数,显示平均工资最高和最低的部门名称。
1.3 事务处理
设置事务处理为手动提交,建立两个连接。
-
观察
@@transaction_isolation
设置为read-uncommited
时,脏读的情况。
1)在一个连接A
中,设置@@transaction_isolation
设置为read-uncommited
,开始事务,显示employees
表中‘ 王林 ’员工信息;
2)在另一个连接B
中,修改‘ 王林 ’的workYear
为10
年;
3)在连接A
中显示employees
表的员工信息,观察‘王林’的workYear
;
4)在一个连接B
中,回滚刚才的修改操作;
5)在连接A
中显示employees
表的员工信息,观察‘王林’的workYear
。 -
观察
@@transaction_isolation
设置为read-commited
时,不可重复读的情况。
1)在一个连接A
中,设置@@transaction_isolation
设置为read-commited
;
2)开始事务,显示employees
表中‘王林’员工信息;
3)在另一个连接B
中,修改‘王林’的workYear
为10
年;
4)在连接A
中显示employees
表的员工信息,观察‘王林’的workYear
;
5)在一个连接B
中,提交刚才的修改操作;
6)在连接A
中显示employees
表的员工信息,观察‘王林’的workYear
,提交事务。 -
观察
@@transaction_isolation
设置为repeatable-read
时,幻读的情况。
1)在一个连接A
中,设置@@transaction_isolation
设置为repeatable-read
;
2)开始事务,显示employees
表中所有员工信息,观察记录的数目;
3)在另一个连接B
中,在employees
表插入一条记录,并提交事务;
4)在连接A
中显示employees
表的员工信息,观察记录的数目;
5)在连接A
中,将所有员工的workYear
增加一年,观察被修改的记录的数目;
6)在连接A
中提交事务;
8)在连接A
再次显示employees
表中所有员工信息,观察记录的数目; -
设置
@@transaction_isolation
设置为serializable
;
重复第3
个实验的操作,观察操作中出现的现象。
2. 解答
2.1 存储过程
use yggl;
-
创建表
RandNumber
:字段:id
自增长,data int
; 创建存储过程向表中插入指定个数的随机数(1-99
),但如果插入的数为50
,则终止插入。drop table if EXISTS `yggl`.`RandNumber`; CREATE TABLE if not EXISTS`yggl`.`RandNumber` (`id` int NOT NULL AUTO_INCREMENT,`data` int NOT NULL,PRIMARY KEY (`id`) );drop PROCEDURE if EXISTS p_RandNumber; delimiter $ create procedure p_RandNumber(in n int) begindeclare temp int;declare i int default(1);set temp = 1 + floor(rand()*99);while i <= n and temp != 50 doinsert into randnumber values (null, temp);set temp = 1 + floor(rand()*99);set i = i + 1;end while; end$ delimiter ;set @n=100; call p_RandNumber(@n); select * from randnumber;
-
创建存储过程,根据员工的工作时间,如果大于
6
年时,将其转到经理办公室工作,并调用该存储过程。drop PROCEDURE if EXISTS p2; delimiter $ create procedure p2() begindeclare did char(3); # 部门编号declare eid char(6); # 员工编号select departments.DepartmentID into didfrom departmentswhere departments.DepartmentName = '经理办公室';select employees.EmployeeID into eidfrom employeeswhere employees.WorkYear > 6;update employeesset DepartmentID = didwhere employees.EmployeeID in(eid); end$ delimiter ;call p2();
-
创建存储过程,比较两个员工的实际收入,若前者比后者高输出
1
,若两者相等输出0
,若后者比前者高输出-1
,并调用该存储过程。drop PROCEDURE if EXISTS p3; delimiter $ create procedure p3(in mname1 char(10), in mname2 char(10)) begindeclare m1 float; # 第一个人的实际收入declare m2 float; # 第二个人的实际收入declare flag int; # 1,0,-1select salary.InCome - salary.OutCome into m1from salary join employees on salary.EmployeeID = employees.EmployeeIDwhere employees.`Name` = mname1;select salary.InCome - salary.OutCome into m2from salary join employees on salary.EmployeeID = employees.EmployeeIDwhere employees.`Name` = mname2;if m1 > m2 thenset flag = 1;elseif m1 = m2 thenset flag = 0;elseset flag = -1;end if;select flag; end$ delimiter ;call p3('王浩', '伍容华');
-
创建存储过程
p(in name char(10),out income decimal(7,2))
,计算一个员工的实际收入,并调用该存储过程,将员工 朱骏 的实际收入保存在一个用户变量中。drop PROCEDURE if EXISTS p; delimiter $ create procedure p(in `name` char(10),out income decimal(7,2)) beginselect salary.InCome - salary.OutCome into incomefrom salary join employees on salary.EmployeeID = employees.EmployeeIDwhere employees.`Name` = `name`;end$ delimiter ;set @c=1; call p('朱骏', @c); select @c;
-
创建存储过程
raise(in edu char(6),in x decimal(5,1))
将所有某种学历的员工的收入提高%x
, 并调用该存储过程,将所有硕士学历的员工的收入提高10%
。drop PROCEDURE if EXISTS raise; delimiter $ create procedure raise(in edu char(6), in x decimal(5,1)) beginupdate salaryset salary.InCome = salary.InCome*(1+x/100)where EmployeeID in(select employees.EmployeeIDfrom employeeswhere employees.Education = edu); end$ delimiter ;call raise('硕士', 10);
2.2 存储函数
-
创建存储函数
getAver(did int)
,计算某个部门的平均工资(实际收入);set GLOBAL log_bin_trust_function_creators = 1; # 一共只需要设置一次drop FUNCTION if exists getAver; delimiter $ create FUNCTION getAver(did int) returns float # 返回某个部门的平均工资(实际收入) begindeclare aver float;select AVG(salary.InCome - salary.OutCome) into averfrom employees join salary on employees.EmployeeID = salary.EmployeeIDwhere employees.DepartmentID = did;return aver; end$ delimiter ;
-
调用该函数,显示平均工资最高和最低的部门名称。
# 平均工资最高的部门 select departments.DepartmentName, getAver(departments.DepartmentID) as avg_salary from departments ORDER BY avg_salary desc limit 1; # 平均工资最低的部门 select departments.DepartmentName, getAver(departments.DepartmentID) as avg_salary from departments ORDER BY avg_salary asc limit 1;
2.3 事务处理
设置事务处理为手动提交,建立两个连接。
set @@autocommit = 0;
-
观察
@@transaction_isolation
设置为read-uncommited
时,脏读的情况。
1)在一个连接A
中,设置@@transaction_isolation
设置为read-uncommited
,开始事务,显示employees
表中‘ 王林 ’员工信息;2)在另一个连接
B
中,修改‘ 王林 ’的workYear
为10
年;3)在连接
A
中显示employees
表的员工信息,观察‘王林’的workYear
;4)在一个连接
B
中,回滚刚才的修改操作;5)在连接
A
中显示employees
表的员工信息,观察‘王林’的workYear
。结论:一个事务
B
读取了另一个未提交的并行事务A
写的数据。【脏读】 -
观察
@@transaction_isolation
设置为read-commited
时,不可重复读的情况。
1)在一个连接A
中,设置@@transaction_isolation
设置为read-commited
;2)开始事务,显示
employees
表中‘王林’员工信息;3)在另一个连接
B
中,修改‘王林’的workYear
为10
年;4)在连接
A
中显示employees
表的员工信息,观察‘王林’的workYear
;5)在一个连接
B
中,提交刚才的修改操作;6)在连接
A
中显示employees
表的员工信息,观察‘王林’的workYear
,提交事务。结论:一个事务A重新读取前面读取过的数据,发现该数据已经被另一个已提交的事务B修改过。【不可重复读】
-
观察
@@transaction_isolation
设置为repeatable-read
时,幻读的情况。
1)在一个连接A
中,设置@@transaction_isolation
设置为repeatable-read
;2)开始事务,显示
employees
表中所有员工信息,观察记录的数目;3)在另一个连接
B
中,在employees
表插入一条记录,并提交事务;4)在连接
A
中显示employees
表的员工信息,观察记录的数目;5)在连接
A
中,将所有员工的workYear
增加一年,观察被修改的记录的数目;6)在连接
A
中提交事务;7)在连接
A
再次显示employees
表中所有员工信息,观察记录的数目;结论:一个事务重新执行一个查询,返回一套符合查询条件的行, 发现这些行因为其他最近提交的事务而发生了改变。【幻读】
-
设置
@@transaction_isolation
设置为serializable
;
重复第3
个实验的操作,观察操作中出现的现象,即:1)在一个连接
A
中,设置@@transaction_isolation
设置为serializable
;2)开始事务,显示
employees
表中所有员工信息,观察记录的数目;3)在另一个连接
B
中,在employees
表插入一条记录,并提交事务;4)在连接
A
中显示employees
表的员工信息,观察记录的数目;5)在连接
A
中,将所有员工的workYear
增加一年,观察被修改的记录的数目;6)在连接
A
中提交事务;7)在连接
A
再次显示employees
表中所有员工信息,观察记录的数目;结论:对于同一个数据来说,在同一个时间段内,只能有一个会话可以访问,包括SELECT和DML,这样可以避免幻读问题。也就是说,对于同一(行)记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。【可序列化】
上一篇文章:【数据库——MySQL】(14)过程式对象程序设计——游标、触发器
下一篇文章:【数据库——MySQL】(16)游标和触发器习题及讲解
相关文章:

【数据库——MySQL】(15)存储过程、存储函数和事务处理习题及讲解
目录 1. 题目1.1 存储过程1.2 存储函数1.3 事务处理 2. 解答2.1 存储过程2.2 存储函数2.3 事务处理 1. 题目 1.1 存储过程 创建表 RandNumber :字段:id 自增长, data int; 创建存储过程向表中插入指定个数的随机数(1-…...

FFmpeg:打印音/视频信息(Meta信息)
多媒体文件基本概念 多媒体文件其实是个容器在容器里面有很多流(Stream/Track)每种流是由不同的编码器编码的从流中读出的数据称为包在一个包中包含着一个或多个帧 几个重要的结构体 AVFormatContextAVStreamAVPacket FFmpeg操作流数据的基本步骤 打印音/视频信息(Meta信息…...

1.Linux入门基本指令
个人主页:Lei宝啊 愿所有美好如期而遇 目录 01.ls指令 02.pwd指令 03.cd指令 04.touch指令 05.mkdir指令(重要) 06.rmdir&&rm指令(重要) 07.man指令(重要) 08.cp指令(重要) 09.mv指令(重要) 10.cat指令 nano指令 echo指令 输出重定向 追加重…...

2023腾讯云服务器优惠代金券领取、查询及使用说明
腾讯云代金券领取渠道有哪些?腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券,大家也可以在腾讯云百科蹲守代金券,因为腾讯云代金券领取渠道比较分散,腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…...

大华智慧园区管理平台任意密码读取漏洞 复现
文章目录 大华智慧园区管理平台任意密码读取漏洞 复现0x01 前言0x02 漏洞描述0x03 影响平台0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 大华智慧园区管理平台任意密码读取漏洞 复现 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试&…...
【C++ 学习 ㉖】- 位图详解(哈希扩展)
目录 一、位图的概念 二、位图的实现 2.1 - bitset.h 2.2 - test.cpp 三、位图的应用 3.1 - 例题一 3.2 - 例题二 一、位图的概念 假设有这样一个需求:在 100 亿个整型数字中快速查询某个数是否存在其中,并假设是 32 位操作系统,4 GB…...

天启科技联创郭志强:趟遍教育行业信数化沟坎,创业智能赛道重塑行业生态
郭志强 天启科技联合创始人 近20年互联网、企业信息化、数字化实施、管理及培训经验。对于集团型企业及初创企业、传统企业及互联网企业的信息化、数字化转型有自己独到的见解和实操经验。具备跨区域、集团化信息规划、解决方案、系统架构及企业流程搭建、优化和技术团队管理能…...

Cuckoo沙箱各Ubuntu版本安装及使用
1.沙箱简介 1.1 沙箱 沙箱是一个虚拟系统程序,允许你在沙箱环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。 在网络安全中ÿ…...

什么是mvvm模式,优点是什么
MVVM(Model-View-ViewModel)模式是一种设计模式。它是一种开发模式,旨在分离用户界面的开发和业务逻辑的开发。MVVM模式将应用程序分为三个部分: Model:它代表应用程序的数据模型和业务逻辑。 View:它代表…...

C/C++ 中的函数返回局部变量以及局部变量的地址?
C/C中,函数内部的一切变量(函数内部局部变量,形参)都是在其被调用时才被分配内存单元。形参和函数内部的局部变量的生命期和作用域都是在函数内部(static变量的生命期除外)。子函数运行结束时,所有局部变量的内存单元会被系统释放。在C中&…...

springboot和vue:七、mybatis/mybatisplus多表查询+分页查询
mybatisplus实际上只对单表查询做了增强(速度会更快),从传统的手写sql语句,自己做映射,变为封装好的QueryWrapper。 本篇文章的内容是有两张表,分别是用户表和订单表,在不直接在数据库做表连接的…...

【Leetcode】 51. N 皇后
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种…...

Java数据库连接:JDBC介绍与简单示例
Java数据库连接:JDBC介绍与简单示例 在Java程序中,操作数据库是必不可少的。JDBC(Java Database Connectivity)是Java中用于连接和操作数据库的一种技术。通过JDBC,Java程序可以与各种关系型数据库进行交互࿰…...

智慧茶园:茶厂茶园监管可视化视频管理系统解决方案
一、方案背景 我国是茶叶生产大国,茶叶销量全世界第一。随着经济社会的发展和人民生活水平的提高,对健康、天然的茶叶产品的消费需求量也在逐步提高。茶叶的种植、生产和制作过程工序复杂,伴随着人力成本的上升,传统茶厂的运营及…...

springboot整合pi支付开发
pi支付流程图: 使用Pi SDK功能发起支付由 Pi SDK 自动调用的回调函数(让您的应用服务器知道它需要发出批准 API 请求)从您的应用程序服务器到 Pi 服务器的 API 请求以批准付款(让 Pi 服务器知道您知道此付款)Pi浏览器向…...

类 ChatGPT 模型存在的局限性
尽管类ChatGPT模型经过数月的迭代和完善,已经初步融入了部分领域以及人们的日常生活,但目前市面上的产品和相关技术仍然存在一些问题,以下列出一些局限性进行详细说明与成因分析: 1)互联网上高质量、大规模、经过清洗…...

Nginx的安全控制
安全控制 关于web服务器的安全是比较大的一个话题,里面所涉及的内容很多,Nginx反向代理是安全隔离来提升web服务器的安全,通过代理分开了客户端到应用程序服务器端的连接,实现了安全措施。在反向代理之前设置防火墙,…...

字符串与字符编码 - GO语言从入门到实战
字符串与字符编码 - GO语言从入门到实战 字符串 与其他主要编程语⾔的差异 基本数据类型:string 是基础数据类型,而不是引用类型或指针类型。string 在内存中占用的空间大小是固定的,且只读、不可改变。字节切片:string 是只读…...

12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller
12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller 我们提供三种不同类别的EDGEBoost I/O模块供选择,以实现最大程度的I/O定制: 数字和模拟输入/输出网络和连接边缘人工智能和存储 利用EDGEBoost I/O实现变革性技术 EBIO-2M2BK EBIO-2M2BK载板支持…...

WPF向Avalonia迁移(四、其他事项)
开发必备 1. Avalonia项目源代码!!!!!!!!!!没有源代码,你连控件的背景色怎么改都找不着!! 2.下载你所使用的版本&#x…...

Python 代码调试
from pdb import set_trace as stx 是一个Python代码中常用的调试技巧之一,它用于在代码中插入断点以进行调试。这行代码的作用是将Python标准库中的 pdb(Python Debugger)模块中的 set_trace 函数导入,并将其重命名为 stx&#x…...

DM宣传单制作,利用在线模板,快速替换文字
如果你需要制作一批宣传单,但是时间很紧,而且没有专业的设计人员协助,那么你可以选择使用在线模板来快速制作宣传单。本文将介绍如何使用乔拓云平台,快速制作宣传单的方法。 步骤一:选择适合的在线制作工具 首先&…...

【力扣】42. 接雨水
这道题我卡了差不多1个小时,不是不会做,是不知道怎么能用栈来实现,后面看了一个博主的视频,豁然开朗,我主要的纠结点在于当指针指到7的时候,我计算出4到7的水块是2,但实际上是0,因为…...

IPETRONIK数据采集设备携手Softing Q-Vision软件致力于ADAS测试方案
一 背景 汽车ADAS技术是当下国内外的重点研究方向,且ADAS的发展水平和市场竞争力紧密相关,因此一套完善的ADAS测试方案对各整车厂而言非常重要。然而,国内ADAS测试却面临着很多阻碍,主要原因在于:相关测试设备昂贵&am…...

Go语言中的指针介绍
Go语言中的指针 文章目录 Go语言中的指针一、Go语言中的指针介绍1.1 指针介绍1.2 基本语法1.3 声明和初始化1.4 Go 指针的3个重要概念1.4.1 指针地址(Pointer Address)1.4.2 指针类型(Pointer Type)1.4.3 指针取值(Poi…...

简单理解区块链
这篇是挖矿篇详细介绍区块链之挖矿-CSDN博客的后置文章,咱们通过之前的解释进一步复习学习区块链叭! 百度百科定义 区块链,就是一个又一个区块组成的链条。每一个区块中保存了一定的信息,它们按照各自产生的时间顺序连接成链条。这…...

[尚硅谷React笔记]——第3章 React应用(基于React脚手架)
目录: react脚手架创建项目并启动react脚手架项目结构一个简单的Hello组件样式的模块化功能界面的组件化编码流程(通用)组件的组合使用-TodoList 1.react脚手架 xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需…...

《Linux 内核设计与实现》13. 虚拟文件系统
通用文件接口 VFS 使得可以直接使用 open()、read()、write() 这样的系统调用而无需考虑具体文件系统和实际物理介质。 好处:新的文件系统和新类型的存储介质需要挂载时,程序无需重写,甚至无需重新编译。 VFS 将各种不同的文件系统抽象后采…...

2021-06-09 51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次
缘由51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次_嵌入式-CSDN问答 #include "REG52.h" sbit K1 P1^0; sbit K2 P1^1; sbit LEDP0^0; void main() {unsigned char Xd0,ss0;unsigned int wei0;while(1){if(K10&&Xd0){ss3*2;…...

C/C++ 经典面试算法题
1.打印杨辉三角 1 #include <stdio.h>2 #include <string.h>3 4 int main()5 {6 int x;7 int a[100][100];8 printf("输入行数\n");9 scanf("%d",&x); 10 for(int i 0;i<x;i) 11 { 12 for(int j 0;…...