mysql数据库之事务与存储过程

事务

什么是事务?

  事务是指一些SQL语句的集合,这些语句同时执行成功完成某项功能

事务的CAID特性:

  原子性:一个事务的执行是整体性的,要么内部所有语句都执行成功,要么一个都别想成功

  一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态。

  隔离性:一个事务的执行不可以被其他事务干扰,一个事物内部语句执行不受并发的其他操作影响,彼此相互隔离。

  持久性:事务的提交对数据库的改变是永久性的,不受外部因素或其他操作影响

事务的语法规则:

create table user(id int primary key auto_increment,name char(32),balance int);insert into user(name,balance) values("zhangsan",1000),("lisi",1000),("wangwu",1000);# 下面产生事务操作start transactionupdate user set balance = 900 where name = "zhangsan";   # 买家支付100元update user set balance = 1010 where name = "lisi"; # 中介拿10元抽成update user set balance = 1090 where name = "wangwu"; # 商家得90元rollback;     # 事务回滚# 开启事务之后,只要没有执行commit操作,数据其实都没有真正刷新到硬盘
commit;
#开启事务检测操作是否完整,不完整主动回滚到上一个状态,如果完整就应该执行commit操作

 

 

存储过程

概念:存储过程包含一堆sql语句,可以通过对存储过程的名字来调用执行内部语句,类似于其他编程语言中的函数

存储过程的

三种开发模型:

第一种:

    应用程序:只需要开发应用程序的逻辑

    mysql:事先编写好存储过程,供应用程序随时调用

    优点:开发效率和执行效率高

    缺点:人为因素较多,跨部门沟通等,扩展性较差

第二种:  

    应用程序:除了要开发应用程序逻辑,还需要编写原生的sql语句

    优点:扩展性较高,都根据mysql语法规则来编写sql语句即可

    缺点:编写原生sql语句十分复杂,并且要考虑到sql语句优化的问题,这就导致了开发效率和执行效率降低的问题

第三种:

    应用程序:只考虑应用程序的逻辑,不需要管SQL语句的实现,基于第三方的工具和库

    优点:开发效率高,直接调用已封装好的功能和方法就好,有更好的兼容性

    缺点:执行效率比较低,执行效率不如第二种

  

 

如何创建存储过程:

# 存储过程在那个库下创建即在哪个库下面生效,不是全局的# 1、直接在mysql中调用
set @res=10 # res的值是用来判断存储过程是否被执行成功的依据,所以需要先定义一个变量@res存储10
call p1(2,4,10); # 报错
call p1(2,4,@res);# 查看结果
select @res; # 执行成功,@res变量值发生了变化# 2、在python程序中调用
pymysql链接mysql
产生的游表cursor.callproc('p1',(2,4,10)) # 内部原理:@_p1_0=2,@_p1_1=4,@_p1_2=10;
cursor.excute('select @_p1_2;')# 3、存储过程与事务使用举例(了解)
delimiter //
create PROCEDURE p5(
OUT p_return_code tinyint
)
BEGIN
  DECLARE exit handler for sqlexceptionBEGIN-- ERRORset p_return_code = 1;rollback;END;DECLARE exit handler for sqlwarningBEGIN-- WARNINGset p_return_code = 2;rollback;END;START TRANSACTION;update user set balance=900 where id =1;
    pdate user123 set balance=1010 where id = 2;
    pdate user set balance=1090 where id =3;COMMIT;-- SUCCESSset p_return_code = 0; #0代表执行成功END //
delimiter ;

 

转载于:https://www.cnblogs.com/dongxixi/p/10885250.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java面试题6 牛客:哪个关键字可以对对象加互斥锁?

哪个关键字可以对对象加互斥锁?() A synchronized B volatile C serialize D static synchronized的4种用法 1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进…

[Leetcode][第347题][JAVA][前K个高频元素][优先队列][堆][遍历set/map]

【问题描述】[中等] 【解答思路】 1. 堆 复杂度 class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> occurrences new HashMap<Integer, Integer>();for (int num : nums) {occurrences.put(num, occurrences.getOrDefault…

Depth-first Search深度优先搜索专题4

576. Out of Boundary Paths 思路&#xff1a;这道题目难倒了我。最直接的思路是暴力搜索。要注意的问题1是需要仔细观察Example2&#xff0c;轨迹不同意思是可以从A点到B点&#xff0c;再从B点到A点也可以&#xff0c;只要step够用。所以暴力搜索&#xff0c;在(i,j)点在步骤…

java面试题7 牛客:关于AWT和Swing说法正确的是?

关于AWT和Swing说法正确的是&#xff1f; A Swing是AWT的子类 B AWT在不同操作系统中显示相同的风格 C AWT不支持事件类型&#xff0c;Swing支持事件模型 D Swing在不同的操作系统中显示相同的风格 AWT和Swing都是java中的包。 AWT(Abstract Window Toolkit)&#xff1a;…

bwa比对软件的使用以及其结果文件(sam)格式说明

一、bwa比对软件的使用 1、对参考基因组构建索引 bwa index -a bwtsw hg19.fa # -a 参数&#xff1a;is[默认] or bwtsw&#xff0c;即bwa构建索引的两种算法&#xff0c;两种算法都是基于BWT的&#xff08;BWT search while the CIGAR string by Smith-Waterman alignment.…

【小技巧】【map】【set】【Java】map /set 的遍历

map public static void main(String[] args) {// 构建一个Map 初始值为3条数据Map<String, String> map new HashMap<String, String>();map.put("1", "xiaqiu");map.put("2", "pangzi");map.put("3", "…

java面试题8 牛客:在Web应用程序中,( )负责将HTTP请求转换为HttpServletRequest对象

在Web应用程序中&#xff0c;( )负责将HTTP请求转换为HttpServletRequest对象 A Servlet对象 B HTTP服务器 C Web容器 D JSP网页 首先我们来看看web程序的整个过程 web的基本工作流程 首先&#xff0c;我们先来思考一下我们平常在上网浏览网页时候的场景&#xff0c;…

2018-2019-2-20175225 实验四《Android开发基础》实验报告

一、实验报告封面 课程&#xff1a;Java程序设计 班级&#xff1a;1752班 姓名&#xff1a;张元瑞 学号&#xff1a;20175225 指导教师&#xff1a;娄嘉鹏 实验日期&#xff1a;2019年5月14日 实验时间&#xff1a;13:45 - 21:00 实验序号&#xff1a;实验四 实验名称&#xff…

Depth-first Search深度优先搜索专题5

329. Longest Increasing Path in a Matrix 思路&#xff1a;计算某个位置i,j&#xff0c;最长路径的长度。计算长度的条件是&#xff1a;如果i,j的相邻位置newi&#xff0c;newj不能出matrix的边界&#xff0c;并且matrix[newi][newj]>matrix[i][j]matrix[newi][newj]>…

【小技巧】【Java】 创建指定数目m的Set数组

1. Set[] 并初始化 Set[] sets new Set[m]; //均会指向同一对象 // Arrays.fill(sets,new HashSet()); for(int i 0;i<m;i){sets[i] new HashSet<Integer>();}2. Stream 流 Set[] sets Stream.generate(HashSet::new).limit(m).toArray(Set[]::new); for循环初始…

第七十六期:3000台服务器不宕机,微博广告系统全景运维大法

微博现在日活达到了 2 亿&#xff0c;微博广告是微博最重要且稳定的收入来源&#xff0c;没有之一&#xff0c;所以微博广告系统的稳定性是我们广告运维所有工作中的重中之重。 作者&#xff1a;孙燕来源 微博现在日活达到了 2 亿&#xff0c;微博广告是微博最重要且稳定的收入…

第六章小结

本章&#xff0c;我们学习了图。 首先是图(GRAPH)的定义 一种非线性数据结构&#xff0c;由有穷、非空的点集V(G)和边集E(G)组成。当G中的每条边有方向时&#xff0c;称G为有向图&#xff0c;有向边&#xff08;用一对尖括号<a,b>&#xff09;又称为弧&#xff0c;起始顶…

753 Cracking the Safe

方法一 Hierholzer’s Algorithm 相关概念&#xff1a; 1 欧拉路径&#xff1a;在无向图中&#xff0c;每个边只经过一次&#xff0c;形成的路径。在有向图中&#xff0c;是指每条有向边只使用一次&#xff0c;形成的路径。 2 欧拉回路&#xff1a;欧拉路径是一个环。 3 在…

【小技巧】【堆】【优先队列】优先队列初始化

大小堆的建立&#xff08;其他类比&#xff09; 1.1 Map的小堆 //a - b 小堆&#xff08;前减后&#xff09; PriorityQueue<Integer> queue new PriorityQueue<>((a,b)->map.get(a)-map.get(b));1.2 Map的大堆 //b - a 大堆&#xff08;后减前&#xff0…

java面试题9 牛客:不同的服务器之间,哪种通信方式是不可行的

在一个基于分布式的游戏服务器系统中&#xff0c;不同的服务器之间&#xff0c;哪种通信方式是不可行的&#xff08;&#xff09;&#xff1f; A管道 B消息队列 C高速缓存数据库 D套接字 首先看到这道题我是懵逼的&#xff0c;我们分别介绍一下各个的概念 管道为运行在同…

MySQL查询语句的45道练习

一、设有一数据库&#xff0c;包括四个表&#xff1a;学生表&#xff08;Student&#xff09;、课程表&#xff08;Course&#xff09;、成绩表&#xff08;Score&#xff09;以及教师信息表&#xff08;Teacher&#xff09;。四个表的结构分别如表1-1的表&#xff08;一&#…

[Leetcode][第77题][JAVA][组合][回溯]

【问题描述】[中等] 【解答思路】 1. 回溯 class Solution {List<List<Integer>> lists new ArrayList<>();public List<List<Integer>> combine(int n, int k) {List<Integer> list new ArrayList<>();backTrace(list, n, k, 0)…

Depth-first Search深度优先搜索专题6

472 Concatenated Words 思路&#xff1a;将词典使用Trie树表示。对于输入的词word&#xff0c;在Trie树上找&#xff0c;当遇到一个isWordtrue的节点&#xff0c;查看剩下部分的词是否在词典中。 例如输入 [“cat”,”cats”,”catsdogcats”,”dog”,”dogcatsdog”,”hipp…

java面试题10 牛客:以下可以正确获取结果集的有

以下可以正确获取结果集的有 A Statement stacon.createStatement();<br>ResultSet rststa.executeQuery(“select * from book”); B Statement stacon.createStatement(“select * from book”); ResultSet rststa.executeQuery(); C PreparedStatement pstcon.prep…

目标检测近5年发展历程概述(转)

目标检测近5年发展历程概述&#xff0c;从R-CNN到RFBNet&#xff08;2013--2018&#xff09;&#xff08;转&#xff09; 2018年09月24日 12:32:02 C小C 【时间】2018.09.24 【题目】目标检测近5年发展历程概述&#xff0c;从R-CNN到RFBNet&#xff08;2013--2018&#xff09; …